<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.22">
<title>Strimzi Custom Resource API Reference</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/styles/github.min.css">
</head>
<body id="configuring-book_reference" class="book toc2 toc-left">
<div id="header">
<h1>Strimzi Custom Resource API Reference</h1>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#con-schema-reference-intro-reference">1. Using schema properties to configure custom resources</a></li>
<li><a href="#con-common-configuration-properties-reference">2. Common configuration properties</a>
<ul class="sectlevel2">
<li><a href="#con-common-configuration-replicas-reference">2.1. <code>replicas</code></a></li>
<li><a href="#con-common-configuration-bootstrap-reference">2.2. <code>bootstrapServers</code></a></li>
<li><a href="#con-common-configuration-ssl-reference">2.3. <code>ssl</code> (supported TLS versions and cipher suites)</a></li>
<li><a href="#con-common-configuration-trusted-certificates-reference">2.4. <code>trustedCertificates</code></a></li>
<li><a href="#con-common-configuration-resources-reference">2.5. <code>resources</code></a></li>
<li><a href="#con-common-configuration-images-reference">2.6. <code>image</code></a></li>
<li><a href="#con-common-configuration-healthchecks-reference">2.7. <code>livenessProbe</code> and <code>readinessProbe</code> healthchecks</a></li>
<li><a href="#con-common-configuration-prometheus-reference">2.8. <code>metricsConfig</code></a></li>
<li><a href="#con-common-configuration-jvm-reference">2.9. <code>jvmOptions</code></a></li>
<li><a href="#con-common-configuration-garbage-collection-reference">2.10. Garbage collector logging</a></li>
</ul>
</li>
<li><a href="#type-Kafka-reference">3. <code>Kafka</code> schema reference</a></li>
<li><a href="#type-KafkaSpec-reference">4. <code>KafkaSpec</code> schema reference</a></li>
<li><a href="#type-KafkaClusterSpec-reference">5. <code>KafkaClusterSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-kafka-listeners-reference">5.1. <code>listeners</code></a></li>
<li><a href="#property-kafka-config-reference">5.2. <code>config</code></a></li>
<li><a href="#property-kafka-brokerRackInitImage-reference">5.3. <code>brokerRackInitImage</code></a></li>
<li><a href="#property-kafka-logging-reference">5.4. <code>logging</code></a></li>
<li><a href="#type-KafkaClusterSpec-schema-reference">5.5. <code>KafkaClusterSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-GenericKafkaListener-reference">6. <code>GenericKafkaListener</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-generic-listeners-reference">6.1. <code>listeners</code></a></li>
<li><a href="#property-listener-port-reference">6.2. <code>port</code></a></li>
<li><a href="#type">6.3. <code>type</code></a></li>
<li><a href="#property-listener-tls-reference">6.4. <code>tls</code></a></li>
<li><a href="#authentication">6.5. <code>authentication</code></a></li>
<li><a href="#configuration-listener-network-policy-reference">6.6. <code>networkPolicyPeers</code></a></li>
<li><a href="#type-GenericKafkaListener-schema-reference">6.7. <code>GenericKafkaListener</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaListenerAuthenticationTls-reference">7. <code>KafkaListenerAuthenticationTls</code> schema reference</a></li>
<li><a href="#type-KafkaListenerAuthenticationScramSha512-reference">8. <code>KafkaListenerAuthenticationScramSha512</code> schema reference</a></li>
<li><a href="#type-KafkaListenerAuthenticationOAuth-reference">9. <code>KafkaListenerAuthenticationOAuth</code> schema reference</a></li>
<li><a href="#type-GenericSecretSource-reference">10. <code>GenericSecretSource</code> schema reference</a></li>
<li><a href="#type-CertSecretSource-reference">11. <code>CertSecretSource</code> schema reference</a></li>
<li><a href="#type-KafkaListenerAuthenticationCustom-reference">12. <code>KafkaListenerAuthenticationCustom</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#listenerconfig">12.1. <code>listenerConfig</code></a></li>
<li><a href="#secrets">12.2. <code>secrets</code></a></li>
<li><a href="#principal_builder">12.3. Principal builder</a></li>
<li><a href="#type-KafkaListenerAuthenticationCustom-schema-reference">12.4. <code>KafkaListenerAuthenticationCustom</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-GenericKafkaListenerConfiguration-reference">13. <code>GenericKafkaListenerConfiguration</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-listener-config-brokerCertChainAndKey-reference">13.1. <code>brokerCertChainAndKey</code></a></li>
<li><a href="#property-listener-config-traffic-policy-reference">13.2. <code>externalTrafficPolicy</code></a></li>
<li><a href="#property-listener-config-source-ranges-reference">13.3. <code>loadBalancerSourceRanges</code></a></li>
<li><a href="#property-listener-config-class-reference">13.4. <code>class</code></a></li>
<li><a href="#property-listener-config-preferredNodePortAddressType-reference">13.5. <code>preferredNodePortAddressType</code></a></li>
<li><a href="#property-listener-config-dns-reference">13.6. <code>useServiceDnsDomain</code></a></li>
<li><a href="#type-GenericKafkaListenerConfiguration-schema-reference">13.7. <code>GenericKafkaListenerConfiguration</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-CertAndKeySecretSource-reference">14. <code>CertAndKeySecretSource</code> schema reference</a></li>
<li><a href="#type-GenericKafkaListenerConfigurationBootstrap-reference">15. <code>GenericKafkaListenerConfigurationBootstrap</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-listener-config-altnames-reference">15.1. <code>alternativeNames</code></a></li>
<li><a href="#property-listener-config-host-reference">15.2. <code>host</code></a></li>
<li><a href="#property-listener-config-nodeport-reference">15.3. <code>nodePort</code></a></li>
<li><a href="#property-listener-config-lb-ip-reference">15.4. <code>loadBalancerIP</code></a></li>
<li><a href="#property-listener-config-annotations-reference">15.5. <code>annotations</code></a></li>
<li><a href="#type-GenericKafkaListenerConfigurationBootstrap-schema-reference">15.6. <code>GenericKafkaListenerConfigurationBootstrap</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-GenericKafkaListenerConfigurationBroker-reference">16. <code>GenericKafkaListenerConfigurationBroker</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-GenericKafkaListenerConfigurationBroker-schema-reference">16.1. <code>GenericKafkaListenerConfigurationBroker</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-EphemeralStorage-reference">17. <code>EphemeralStorage</code> schema reference</a></li>
<li><a href="#type-PersistentClaimStorage-reference">18. <code>PersistentClaimStorage</code> schema reference</a></li>
<li><a href="#type-PersistentClaimStorageOverride-reference">19. <code>PersistentClaimStorageOverride</code> schema reference</a></li>
<li><a href="#type-JbodStorage-reference">20. <code>JbodStorage</code> schema reference</a></li>
<li><a href="#type-KafkaAuthorizationSimple-reference">21. <code>KafkaAuthorizationSimple</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-simple-authorization-superusers-reference">21.1. <code>superUsers</code></a></li>
<li><a href="#type-KafkaAuthorizationSimple-schema-reference">21.2. <code>KafkaAuthorizationSimple</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaAuthorizationOpa-reference">22. <code>KafkaAuthorizationOpa</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#url">22.1. <code>url</code></a></li>
<li><a href="#allowonerror">22.2. <code>allowOnError</code></a></li>
<li><a href="#initialcachecapacity">22.3. <code>initialCacheCapacity</code></a></li>
<li><a href="#maximumcachesize">22.4. <code>maximumCacheSize</code></a></li>
<li><a href="#expireafterms">22.5. <code>expireAfterMs</code></a></li>
<li><a href="#tlstrustedcertificates">22.6. <code>tlsTrustedCertificates</code></a></li>
<li><a href="#superusers">22.7. <code>superUsers</code></a></li>
<li><a href="#type-KafkaAuthorizationOpa-schema-reference">22.8. <code>KafkaAuthorizationOpa</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaAuthorizationKeycloak-reference">23. <code>KafkaAuthorizationKeycloak</code> schema reference</a></li>
<li><a href="#type-KafkaAuthorizationCustom-reference">24. <code>KafkaAuthorizationCustom</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-custom-authorization-authorizerclass-reference">24.1. <code>authorizerClass</code></a></li>
<li><a href="#property-custom-authorization-superusers-reference">24.2. <code>superUsers</code></a></li>
<li><a href="#type-KafkaAuthorizationCustom-schema-reference">24.3. <code>KafkaAuthorizationCustom</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-Rack-reference">25. <code>Rack</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#spreading_partition_replicas_across_racks">25.1. Spreading partition replicas across racks</a></li>
<li><a href="#consuming_messages_from_the_closest_replicas">25.2. Consuming messages from the closest replicas</a></li>
<li><a href="#type-Rack-schema-reference">25.3. <code>Rack</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-Probe-reference">26. <code>Probe</code> schema reference</a></li>
<li><a href="#type-JvmOptions-reference">27. <code>JvmOptions</code> schema reference</a></li>
<li><a href="#type-SystemProperty-reference">28. <code>SystemProperty</code> schema reference</a></li>
<li><a href="#type-KafkaJmxOptions-reference">29. <code>KafkaJmxOptions</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-KafkaJmxOptions-schema-reference">29.1. <code>KafkaJmxOptions</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaJmxAuthenticationPassword-reference">30. <code>KafkaJmxAuthenticationPassword</code> schema reference</a></li>
<li><a href="#type-JmxPrometheusExporterMetrics-reference">31. <code>JmxPrometheusExporterMetrics</code> schema reference</a></li>
<li><a href="#type-ExternalConfigurationReference-reference">32. <code>ExternalConfigurationReference</code> schema reference</a></li>
<li><a href="#type-InlineLogging-reference">33. <code>InlineLogging</code> schema reference</a></li>
<li><a href="#type-ExternalLogging-reference">34. <code>ExternalLogging</code> schema reference</a></li>
<li><a href="#type-KafkaClusterTemplate-reference">35. <code>KafkaClusterTemplate</code> schema reference</a></li>
<li><a href="#type-StatefulSetTemplate-reference">36. <code>StatefulSetTemplate</code> schema reference</a></li>
<li><a href="#type-MetadataTemplate-reference">37. <code>MetadataTemplate</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-MetadataTemplate-schema-reference">37.1. <code>MetadataTemplate</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-PodTemplate-reference">38. <code>PodTemplate</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-hostaliases-config-reference">38.1. <code>hostAliases</code></a></li>
<li><a href="#type-PodTemplate-schema-reference">38.2. <code>PodTemplate</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-InternalServiceTemplate-reference">39. <code>InternalServiceTemplate</code> schema reference</a></li>
<li><a href="#type-ResourceTemplate-reference">40. <code>ResourceTemplate</code> schema reference</a></li>
<li><a href="#type-PodDisruptionBudgetTemplate-reference">41. <code>PodDisruptionBudgetTemplate</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-PodDisruptionBudgetTemplate-schema-reference">41.1. <code>PodDisruptionBudgetTemplate</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-ContainerTemplate-reference">42. <code>ContainerTemplate</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-ContainerTemplate-schema-reference">42.1. <code>ContainerTemplate</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-ContainerEnvVar-reference">43. <code>ContainerEnvVar</code> schema reference</a></li>
<li><a href="#type-TieredStorageCustom-reference">44. <code>TieredStorageCustom</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-TieredStorageCustom-schema-reference">44.1. <code>TieredStorageCustom</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-RemoteStorageManager-reference">45. <code>RemoteStorageManager</code> schema reference</a></li>
<li><a href="#type-ZookeeperClusterSpec-reference">46. <code>ZookeeperClusterSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-zookeeper-config-reference">46.1. <code>config</code></a></li>
<li><a href="#property-zookeeper-logging-reference">46.2. <code>logging</code></a></li>
<li><a href="#type-ZookeeperClusterSpec-schema-reference">46.3. <code>ZookeeperClusterSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-ZookeeperClusterTemplate-reference">47. <code>ZookeeperClusterTemplate</code> schema reference</a></li>
<li><a href="#type-EntityOperatorSpec-reference">48. <code>EntityOperatorSpec</code> schema reference</a></li>
<li><a href="#type-EntityTopicOperatorSpec-reference">49. <code>EntityTopicOperatorSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-topic-operator-logging-reference">49.1. <code>logging</code></a></li>
<li><a href="#type-EntityTopicOperatorSpec-schema-reference">49.2. <code>EntityTopicOperatorSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-EntityUserOperatorSpec-reference">50. <code>EntityUserOperatorSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-user-operator-logging-reference">50.1. <code>logging</code></a></li>
<li><a href="#type-EntityUserOperatorSpec-schema-reference">50.2. <code>EntityUserOperatorSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-TlsSidecar-reference">51. <code>TlsSidecar</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-TlsSidecar-schema-reference">51.1. <code>TlsSidecar</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-EntityOperatorTemplate-reference">52. <code>EntityOperatorTemplate</code> schema reference</a></li>
<li><a href="#type-DeploymentTemplate-reference">53. <code>DeploymentTemplate</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-DeploymentTemplate-schema-reference">53.1. <code>DeploymentTemplate</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-CertificateAuthority-reference">54. <code>CertificateAuthority</code> schema reference</a></li>
<li><a href="#type-CruiseControlSpec-reference">55. <code>CruiseControlSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-cruise-control-config-reference">55.1. <code>config</code></a></li>
<li><a href="#property-cruise-control-config-cors-reference">55.2. Cross-Origin Resource Sharing (CORS)</a></li>
<li><a href="#cruise_control_rest_api_security">55.3. Cruise Control REST API security</a></li>
<li><a href="#property-cruise-control-broker-capacity-reference">55.4. brokerCapacity</a></li>
<li><a href="#property-cruise-control-capacity-overrides-reference">55.5. Capacity overrides</a></li>
<li><a href="#property-cruise-control-logging-reference">55.6. <code>logging</code></a></li>
<li><a href="#type-CruiseControlSpec-schema-reference">55.7. <code>CruiseControlSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-CruiseControlTemplate-reference">56. <code>CruiseControlTemplate</code> schema reference</a></li>
<li><a href="#type-BrokerCapacity-reference">57. <code>BrokerCapacity</code> schema reference</a></li>
<li><a href="#type-BrokerCapacityOverride-reference">58. <code>BrokerCapacityOverride</code> schema reference</a></li>
<li><a href="#type-JmxTransSpec-reference">59. <code>JmxTransSpec</code> schema reference</a></li>
<li><a href="#type-JmxTransOutputDefinitionTemplate-reference">60. <code>JmxTransOutputDefinitionTemplate</code> schema reference</a></li>
<li><a href="#type-JmxTransQueryTemplate-reference">61. <code>JmxTransQueryTemplate</code> schema reference</a></li>
<li><a href="#type-JmxTransTemplate-reference">62. <code>JmxTransTemplate</code> schema reference</a></li>
<li><a href="#type-KafkaExporterSpec-reference">63. <code>KafkaExporterSpec</code> schema reference</a></li>
<li><a href="#type-KafkaExporterTemplate-reference">64. <code>KafkaExporterTemplate</code> schema reference</a></li>
<li><a href="#type-KafkaStatus-reference">65. <code>KafkaStatus</code> schema reference</a></li>
<li><a href="#type-Condition-reference">66. <code>Condition</code> schema reference</a></li>
<li><a href="#type-ListenerStatus-reference">67. <code>ListenerStatus</code> schema reference</a></li>
<li><a href="#type-ListenerAddress-reference">68. <code>ListenerAddress</code> schema reference</a></li>
<li><a href="#type-UsedNodePoolStatus-reference">69. <code>UsedNodePoolStatus</code> schema reference</a></li>
<li><a href="#type-KafkaConnect-reference">70. <code>KafkaConnect</code> schema reference</a></li>
<li><a href="#type-KafkaConnectSpec-reference">71. <code>KafkaConnectSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-kafka-connect-config-reference">71.1. <code>config</code></a></li>
<li><a href="#property-kafka-connect-logging-reference">71.2. <code>logging</code></a></li>
<li><a href="#type-KafkaConnectSpec-schema-reference">71.3. <code>KafkaConnectSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-ClientTls-reference">72. <code>ClientTls</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#trustedcertificates">72.1. <code>trustedCertificates</code></a></li>
<li><a href="#type-ClientTls-schema-reference">72.2. <code>ClientTls</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaClientAuthenticationTls-reference">73. <code>KafkaClientAuthenticationTls</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#certificateandkey">73.1. <code>certificateAndKey</code></a></li>
<li><a href="#type-KafkaClientAuthenticationTls-schema-reference">73.2. <code>KafkaClientAuthenticationTls</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaClientAuthenticationScramSha256-reference">74. <code>KafkaClientAuthenticationScramSha256</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#username">74.1. <code>username</code></a></li>
<li><a href="#passwordsecret">74.2. <code>passwordSecret</code></a></li>
<li><a href="#type-KafkaClientAuthenticationScramSha256-schema-reference">74.3. <code>KafkaClientAuthenticationScramSha256</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-PasswordSecretSource-reference">75. <code>PasswordSecretSource</code> schema reference</a></li>
<li><a href="#type-KafkaClientAuthenticationScramSha512-reference">76. <code>KafkaClientAuthenticationScramSha512</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#username_2">76.1. <code>username</code></a></li>
<li><a href="#passwordsecret_2">76.2. <code>passwordSecret</code></a></li>
<li><a href="#type-KafkaClientAuthenticationScramSha512-schema-reference">76.3. <code>KafkaClientAuthenticationScramSha512</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaClientAuthenticationPlain-reference">77. <code>KafkaClientAuthenticationPlain</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#username_3">77.1. <code>username</code></a></li>
<li><a href="#passwordsecret_3">77.2. <code>passwordSecret</code></a></li>
<li><a href="#type-KafkaClientAuthenticationPlain-schema-reference">77.3. <code>KafkaClientAuthenticationPlain</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaClientAuthenticationOAuth-reference">78. <code>KafkaClientAuthenticationOAuth</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-KafkaClientAuthenticationOAuth-schema-reference">78.1. <code>KafkaClientAuthenticationOAuth</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-JaegerTracing-reference">79. <code>JaegerTracing</code> schema reference</a></li>
<li><a href="#type-OpenTelemetryTracing-reference">80. <code>OpenTelemetryTracing</code> schema reference</a></li>
<li><a href="#type-KafkaConnectTemplate-reference">81. <code>KafkaConnectTemplate</code> schema reference</a></li>
<li><a href="#type-BuildConfigTemplate-reference">82. <code>BuildConfigTemplate</code> schema reference</a></li>
<li><a href="#type-ExternalConfiguration-reference">83. <code>ExternalConfiguration</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-ExternalConfiguration-schema-reference">83.1. <code>ExternalConfiguration</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-ExternalConfigurationEnv-reference">84. <code>ExternalConfigurationEnv</code> schema reference</a></li>
<li><a href="#type-ExternalConfigurationEnvVarSource-reference">85. <code>ExternalConfigurationEnvVarSource</code> schema reference</a></li>
<li><a href="#type-ExternalConfigurationVolumeSource-reference">86. <code>ExternalConfigurationVolumeSource</code> schema reference</a></li>
<li><a href="#type-Build-reference">87. <code>Build</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#output">87.1. <code>output</code></a></li>
<li><a href="#plugins">87.2. <code>plugins</code></a></li>
<li><a href="#type-Build-schema-reference">87.3. <code>Build</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-DockerOutput-reference">88. <code>DockerOutput</code> schema reference</a></li>
<li><a href="#type-ImageStreamOutput-reference">89. <code>ImageStreamOutput</code> schema reference</a></li>
<li><a href="#type-Plugin-reference">90. <code>Plugin</code> schema reference</a></li>
<li><a href="#type-JarArtifact-reference">91. <code>JarArtifact</code> schema reference</a></li>
<li><a href="#type-TgzArtifact-reference">92. <code>TgzArtifact</code> schema reference</a></li>
<li><a href="#type-ZipArtifact-reference">93. <code>ZipArtifact</code> schema reference</a></li>
<li><a href="#type-MavenArtifact-reference">94. <code>MavenArtifact</code> schema reference</a></li>
<li><a href="#type-OtherArtifact-reference">95. <code>OtherArtifact</code> schema reference</a></li>
<li><a href="#type-KafkaConnectStatus-reference">96. <code>KafkaConnectStatus</code> schema reference</a></li>
<li><a href="#type-ConnectorPlugin-reference">97. <code>ConnectorPlugin</code> schema reference</a></li>
<li><a href="#type-KafkaTopic-reference">98. <code>KafkaTopic</code> schema reference</a></li>
<li><a href="#type-KafkaTopicSpec-reference">99. <code>KafkaTopicSpec</code> schema reference</a></li>
<li><a href="#type-KafkaTopicStatus-reference">100. <code>KafkaTopicStatus</code> schema reference</a></li>
<li><a href="#type-KafkaUser-reference">101. <code>KafkaUser</code> schema reference</a></li>
<li><a href="#type-KafkaUserSpec-reference">102. <code>KafkaUserSpec</code> schema reference</a></li>
<li><a href="#type-KafkaUserTlsClientAuthentication-reference">103. <code>KafkaUserTlsClientAuthentication</code> schema reference</a></li>
<li><a href="#type-KafkaUserTlsExternalClientAuthentication-reference">104. <code>KafkaUserTlsExternalClientAuthentication</code> schema reference</a></li>
<li><a href="#type-KafkaUserScramSha512ClientAuthentication-reference">105. <code>KafkaUserScramSha512ClientAuthentication</code> schema reference</a></li>
<li><a href="#type-Password-reference">106. <code>Password</code> schema reference</a></li>
<li><a href="#type-PasswordSource-reference">107. <code>PasswordSource</code> schema reference</a></li>
<li><a href="#type-KafkaUserAuthorizationSimple-reference">108. <code>KafkaUserAuthorizationSimple</code> schema reference</a></li>
<li><a href="#type-AclRule-reference">109. <code>AclRule</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-AclRule-schema-reference">109.1. <code>AclRule</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-AclRuleTopicResource-reference">110. <code>AclRuleTopicResource</code> schema reference</a></li>
<li><a href="#type-AclRuleGroupResource-reference">111. <code>AclRuleGroupResource</code> schema reference</a></li>
<li><a href="#type-AclRuleClusterResource-reference">112. <code>AclRuleClusterResource</code> schema reference</a></li>
<li><a href="#type-AclRuleTransactionalIdResource-reference">113. <code>AclRuleTransactionalIdResource</code> schema reference</a></li>
<li><a href="#type-KafkaUserQuotas-reference">114. <code>KafkaUserQuotas</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#quotas">114.1. <code>quotas</code></a></li>
<li><a href="#type-KafkaUserQuotas-schema-reference">114.2. <code>KafkaUserQuotas</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaUserTemplate-reference">115. <code>KafkaUserTemplate</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-KafkaUserTemplate-schema-reference">115.1. <code>KafkaUserTemplate</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaUserStatus-reference">116. <code>KafkaUserStatus</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMaker-reference">117. <code>KafkaMirrorMaker</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMakerSpec-reference">118. <code>KafkaMirrorMakerSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-mm-include-reference">118.1. <code>include</code></a></li>
<li><a href="#property-mm-producer-consumer-reference">118.2. <code>KafkaMirrorMakerConsumerSpec</code> and <code>KafkaMirrorMakerProducerSpec</code></a></li>
<li><a href="#property-mm-loggers-reference">118.3. <code>logging</code></a></li>
<li><a href="#type-KafkaMirrorMakerSpec-schema-reference">118.4. <code>KafkaMirrorMakerSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaMirrorMakerConsumerSpec-reference">119. <code>KafkaMirrorMakerConsumerSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-consumer-streams-reference">119.1. <code>numStreams</code></a></li>
<li><a href="#property-consumer-offset-autocommit-reference">119.2. <code>offsetCommitInterval</code></a></li>
<li><a href="#property-consumer-config-reference">119.3. <code>config</code></a></li>
<li><a href="#property-consumer-group-reference">119.4. <code>groupId</code></a></li>
<li><a href="#type-KafkaMirrorMakerConsumerSpec-schema-reference">119.5. <code>KafkaMirrorMakerConsumerSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaMirrorMakerProducerSpec-reference">120. <code>KafkaMirrorMakerProducerSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-producer-abort-on-send-reference">120.1. <code>abortOnSendFailure</code></a></li>
<li><a href="#property-producer-config-reference">120.2. <code>config</code></a></li>
<li><a href="#type-KafkaMirrorMakerProducerSpec-schema-reference">120.3. <code>KafkaMirrorMakerProducerSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaMirrorMakerTemplate-reference">121. <code>KafkaMirrorMakerTemplate</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMakerStatus-reference">122. <code>KafkaMirrorMakerStatus</code> schema reference</a></li>
<li><a href="#type-KafkaBridge-reference">123. <code>KafkaBridge</code> schema reference</a></li>
<li><a href="#type-KafkaBridgeSpec-reference">124. <code>KafkaBridgeSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-kafka-bridge-logging-reference">124.1. <code>logging</code></a></li>
<li><a href="#type-KafkaBridgeSpec-schema-reference">124.2. <code>KafkaBridgeSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaBridgeHttpConfig-reference">125. <code>KafkaBridgeHttpConfig</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-kafka-bridge-cors-config-reference">125.1. <code>cors</code></a></li>
<li><a href="#type-KafkaBridgeHttpConfig-schema-reference">125.2. <code>KafkaBridgeHttpConfig</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaBridgeHttpCors-reference">126. <code>KafkaBridgeHttpCors</code> schema reference</a></li>
<li><a href="#type-KafkaBridgeAdminClientSpec-reference">127. <code>KafkaBridgeAdminClientSpec</code> schema reference</a></li>
<li><a href="#type-KafkaBridgeConsumerSpec-reference">128. <code>KafkaBridgeConsumerSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-KafkaBridgeConsumerSpec-schema-reference">128.1. <code>KafkaBridgeConsumerSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaBridgeProducerSpec-reference">129. <code>KafkaBridgeProducerSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-KafkaBridgeProducerSpec-schema-reference">129.1. <code>KafkaBridgeProducerSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaBridgeTemplate-reference">130. <code>KafkaBridgeTemplate</code> schema reference</a></li>
<li><a href="#type-KafkaBridgeStatus-reference">131. <code>KafkaBridgeStatus</code> schema reference</a></li>
<li><a href="#type-KafkaConnector-reference">132. <code>KafkaConnector</code> schema reference</a></li>
<li><a href="#type-KafkaConnectorSpec-reference">133. <code>KafkaConnectorSpec</code> schema reference</a></li>
<li><a href="#type-AutoRestart-reference">134. <code>AutoRestart</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-AutoRestart-schema-reference">134.1. <code>AutoRestart</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaConnectorStatus-reference">135. <code>KafkaConnectorStatus</code> schema reference</a></li>
<li><a href="#type-AutoRestartStatus-reference">136. <code>AutoRestartStatus</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMaker2-reference">137. <code>KafkaMirrorMaker2</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMaker2Spec-reference">138. <code>KafkaMirrorMaker2Spec</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMaker2ClusterSpec-reference">139. <code>KafkaMirrorMaker2ClusterSpec</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#property-mirrormaker2-config-reference">139.1. <code>config</code></a></li>
<li><a href="#type-KafkaMirrorMaker2ClusterSpec-schema-reference">139.2. <code>KafkaMirrorMaker2ClusterSpec</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-KafkaMirrorMaker2MirrorSpec-reference">140. <code>KafkaMirrorMaker2MirrorSpec</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMaker2ConnectorSpec-reference">141. <code>KafkaMirrorMaker2ConnectorSpec</code> schema reference</a></li>
<li><a href="#type-KafkaMirrorMaker2Status-reference">142. <code>KafkaMirrorMaker2Status</code> schema reference</a></li>
<li><a href="#type-KafkaRebalance-reference">143. <code>KafkaRebalance</code> schema reference</a></li>
<li><a href="#type-KafkaRebalanceSpec-reference">144. <code>KafkaRebalanceSpec</code> schema reference</a></li>
<li><a href="#type-KafkaRebalanceStatus-reference">145. <code>KafkaRebalanceStatus</code> schema reference</a></li>
<li><a href="#type-KafkaNodePool-reference">146. <code>KafkaNodePool</code> schema reference</a></li>
<li><a href="#type-KafkaNodePoolSpec-reference">147. <code>KafkaNodePoolSpec</code> schema reference</a></li>
<li><a href="#type-KafkaNodePoolTemplate-reference">148. <code>KafkaNodePoolTemplate</code> schema reference</a></li>
<li><a href="#type-KafkaNodePoolStatus-reference">149. <code>KafkaNodePoolStatus</code> schema reference</a></li>
<li><a href="#type-StrimziPodSet-reference">150. <code>StrimziPodSet</code> schema reference</a>
<ul class="sectlevel2">
<li><a href="#type-StrimziPodSet-schema-reference">150.1. <code>StrimziPodSet</code> schema properties</a></li>
</ul>
</li>
<li><a href="#type-StrimziPodSetSpec-reference">151. <code>StrimziPodSetSpec</code> schema reference</a></li>
<li><a href="#type-StrimziPodSetStatus-reference">152. <code>StrimziPodSetStatus</code> schema reference</a></li>
</ul>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="con-schema-reference-intro-reference"><a class="link" href="#con-schema-reference-intro-reference">1. Using schema properties to configure custom resources</a></h2>
<div class="sectionbody">
<div class="paragraph _abstract">
<p>Custom resources offer a flexible way to manage and fine-tune the operation of Strimzi components using configuration properties.
This reference guide describes common configuration properties that apply to multiple custom resources, as well as the configuration properties available for each custom resource schema available with Strimzi.
Where appropriate, expanded descriptions of properties and examples of how they are configured are provided.</p>
</div>
<div class="paragraph">
<p>The properties defined for each schema provide a structured and organized way to specify configuration for the custom resources.
Whether it&#8217;s adjusting resource allocation or specifying access controls, the properties in the schemas allow for a granular level of configuration.
For example, you can use the properties of the <code>KafkaClusterSpec</code> schema to specify the type of storage for a Kafka cluster or add listeners that provide secure access to Kafka brokers.</p>
</div>
<div class="paragraph">
<p>Some property options within a schema may be constrained, as indicated in the property descriptions.
These constraints define specific options or limitations on the values that can be assigned to those properties.
Constraints ensure that the custom resources are configured with valid and appropriate values.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="con-common-configuration-properties-reference"><a class="link" href="#con-common-configuration-properties-reference">2. Common configuration properties</a></h2>
<div class="sectionbody">
<div class="paragraph _abstract">
<p>Use Common configuration properties to configure Strimzi custom resources.
You add common configuration properties to a custom resource like any other supported configuration for that resource.</p>
</div>
<div class="sect2">
<h3 id="con-common-configuration-replicas-reference"><a class="link" href="#con-common-configuration-replicas-reference">2.1. <code>replicas</code></a></h3>
<div class="paragraph">
<p>Use the <code>replicas</code> property to configure replicas.</p>
</div>
<div class="paragraph">
<p>The type of replication depends on the resource.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>KafkaTopic</code> uses a replication factor to configure the number of replicas of each partition within a Kafka cluster.</p>
</li>
<li>
<p>Kafka components use replicas to configure the number of pods in a deployment to provide better availability and scalability.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
When running a Kafka component on Kubernetes it may not be necessary to run multiple replicas for high availability.
When the node where the component is deployed crashes, Kubernetes will automatically reschedule the Kafka component pod to a different node.
However, running Kafka components with multiple replicas can provide faster failover times as the other nodes will be up and running.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-bootstrap-reference"><a class="link" href="#con-common-configuration-bootstrap-reference">2.2. <code>bootstrapServers</code></a></h3>
<div class="paragraph">
<p>Use the <code>bootstrapServers</code> property to configure a list of bootstrap servers.</p>
</div>
<div class="paragraph">
<p>The bootstrap server lists can refer to Kafka clusters that are not deployed in the same Kubernetes cluster.
They can also refer to a Kafka cluster not deployed by Strimzi.</p>
</div>
<div class="paragraph">
<p>If on the same Kubernetes cluster, each list must ideally contain the Kafka cluster bootstrap service which is named <code><em>CLUSTER-NAME</em>-kafka-bootstrap</code> and a port number.
If deployed by Strimzi but on different Kubernetes clusters, the list content depends on the approach used for exposing the clusters (routes, ingress, nodeports or loadbalancers).</p>
</div>
<div class="paragraph">
<p>When using Kafka with a Kafka cluster not managed by Strimzi, you can specify the bootstrap servers list according to the configuration of the given cluster.</p>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-ssl-reference"><a class="link" href="#con-common-configuration-ssl-reference">2.3. <code>ssl</code> (supported TLS versions and cipher suites)</a></h3>
<div class="paragraph">
<p>You can incorporate SSL configuration and cipher suite specifications to further secure TLS-based communication between your client application and a Kafka cluster.
In addition to the standard TLS configuration, you can specify a supported TLS version and enable cipher suites in the configuration for the Kafka broker.
You can also add the configuration to your clients if you wish to limit the TLS versions and cipher suites they use.
The configuration on the client must only use protocols and cipher suites that are enabled on the broker.</p>
</div>
<div class="paragraph">
<p>A cipher suite is a set of security mechanisms for secure connection and data transfer.
For example, the cipher suite <code>TLS_AES_256_GCM_SHA384</code> is composed of the following mechanisms, which are used in conjunction with the TLS protocol:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>AES (Advanced Encryption Standard) encryption (256-bit key)</p>
</li>
<li>
<p>GCM (Galois/Counter Mode) authenticated encryption</p>
</li>
<li>
<p>SHA384 (Secure Hash Algorithm) data integrity protection</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The combination is encapsulated in the <code>TLS_AES_256_GCM_SHA384</code> cipher suite specification.</p>
</div>
<div class="paragraph">
<p>The <code>ssl.enabled.protocols</code> property specifies the available TLS versions that can be used for secure communication between the cluster and its clients.
The <code>ssl.protocol</code> property sets the default TLS version for all connections, and it must be chosen from the enabled protocols.
Use the <code>ssl.endpoint.identification.algorithm</code> property to enable or disable hostname verification (configurable only in components based on Kafka clients - Kafka Connect, MirrorMaker 1/2, and Kafka Bridge).</p>
</div>
<div class="listingblock">
<div class="title">Example SSL configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
config:
  ssl.cipher.suites: TLS_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # <b class="conum">(1)</b>
  ssl.enabled.protocols: TLSv1.3, TLSv1.2 # <b class="conum">(2)</b>
  ssl.protocol: TLSv1.3 # <b class="conum">(3)</b>
  ssl.endpoint.identification.algorithm: HTTPS # <b class="conum">(4)</b>
# ...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>Cipher suite specifications enabled.</p>
</li>
<li>
<p>TLS versions supported.</p>
</li>
<li>
<p>Default TLS version is <code>TLSv1.3</code>. If a client only supports TLSv1.2, it can still connect to the broker and communicate using that supported version, and vice versa if the configuration is on the client and the broker only supports TLSv1.2.</p>
</li>
<li>
<p>Hostname verification is enabled by setting to <code>HTTPS</code>. An empty string disables the verification.</p>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-trusted-certificates-reference"><a class="link" href="#con-common-configuration-trusted-certificates-reference">2.4. <code>trustedCertificates</code></a></h3>
<div class="paragraph">
<p>Having set <code>tls</code> to configure TLS encryption, use the <code>trustedCertificates</code> property to provide a list of secrets with key names under which the certificates are stored in X.509 format.</p>
</div>
<div class="paragraph">
<p>You can use the secrets created by the Cluster Operator for the Kafka cluster,
or you can create your own TLS certificate file, then create a <code>Secret</code> from the file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">kubectl create secret generic <em>MY-SECRET</em> \
--from-file=<em>MY-TLS-CERTIFICATE-FILE.crt</em></code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Example TLS encryption configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">tls:
  trustedCertificates:
    - secretName: my-cluster-cluster-cert
      certificate: ca.crt
    - secretName: my-cluster-cluster-cert
      certificate: ca2.crt</code></pre>
</div>
</div>
<div class="paragraph">
<p>If certificates are stored in the same secret, it can be listed multiple times.</p>
</div>
<div class="paragraph">
<p>If you want to enable TLS encryption, but use the default set of public certification authorities shipped with Java,
you can specify <code>trustedCertificates</code> as an empty array:</p>
</div>
<div class="listingblock">
<div class="title">Example of enabling TLS with the default Java certificates</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">tls:
  trustedCertificates: []</code></pre>
</div>
</div>
<div class="paragraph">
<p>For information on configuring mTLS authentication, see the <a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code> schema reference</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-resources-reference"><a class="link" href="#con-common-configuration-resources-reference">2.5. <code>resources</code></a></h3>
<div class="paragraph">
<p>Configure resource <em>requests</em> and <em>limits</em> to control resources for Strimzi containers.
You can specify requests and limits for <code>memory</code> and <code>cpu</code> resources.
The requests should be enough to ensure a stable performance of Kafka.</p>
</div>
<div class="paragraph">
<p>How you configure resources in a production environment depends on a number of factors.
For example, applications are likely to be sharing resources in your Kubernetes cluster.</p>
</div>
<div class="paragraph">
<p>For Kafka, the following aspects of a deployment can impact the resources you need:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Throughput and size of messages</p>
</li>
<li>
<p>The number of network threads handling messages</p>
</li>
<li>
<p>The number of producers and consumers</p>
</li>
<li>
<p>The number of topics and partitions</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The values specified for resource requests are reserved and always available to the container.
Resource limits specify the maximum resources that can be consumed by a given container.
The amount between the request and limit is not reserved and might not be always available.
A container can use the resources up to the limit only when they are available.
Resource limits are temporary and can be reallocated.</p>
</div>
<div class="paragraph">
<div class="title">Resource requests and limits</div>
<p><span class="image"><img src="images/common-config-resources.png" alt="Boundaries of a resource requests and limits"></span></p>
</div>
<div class="paragraph">
<p>If you set limits without requests or vice versa, Kubernetes uses the same value for both.
Setting equal requests and limits for resources guarantees quality of service, as
Kubernetes will not kill containers unless they exceed their limits.</p>
</div>
<div class="paragraph">
<p>You can configure resource requests and limits for one or more supported resources.</p>
</div>
<div class="listingblock">
<div class="title">Example resource configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    #...
    resources:
      requests:
        memory: 64Gi
        cpu: "8"
      limits:
        memory: 64Gi
        cpu: "12"
  entityOperator:
    #...
    topicOperator:
      #...
      resources:
        requests:
          memory: 512Mi
          cpu: "1"
        limits:
          memory: 512Mi
          cpu: "1"</code></pre>
</div>
</div>
<div class="paragraph">
<p>Resource requests and limits for the Topic Operator and User Operator are set in the <code>Kafka</code> resource.</p>
</div>
<div class="paragraph">
<p>If the resource request is for more than the available free resources in the Kubernetes cluster, the pod is not scheduled.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Strimzi uses the Kubernetes syntax for specifying <code>memory</code> and <code>cpu</code> resources.
For more information about managing computing resources on Kubernetes, see <a href="https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/" target="_blank" rel="noopener">Managing Compute Resources for Containers</a>.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Memory resources</dt>
<dd>
<p>When configuring memory resources, consider the total requirements of the components.</p>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Kafka runs inside a JVM and uses an operating system page cache to store message data before writing to disk.
The memory request for Kafka should fit the JVM heap and page cache.
You can <a href="#con-common-configuration-jvm-reference">configure the <code>jvmOptions</code> property</a> to control the minimum and maximum heap size.</p>
</div>
<div class="paragraph">
<p>Other components don&#8217;t rely on the page cache.
You can configure memory resources without configuring the <code>jvmOptions</code> to control the heap size.</p>
</div>
<div class="paragraph">
<p>Memory requests and limits are specified in megabytes, gigabytes, mebibytes, and gibibytes.
Use the following suffixes in the specification:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>M</code> for megabytes</p>
</li>
<li>
<p><code>G</code> for gigabytes</p>
</li>
<li>
<p><code>Mi</code> for mebibytes</p>
</li>
<li>
<p><code>Gi</code> for gibibytes</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example resources using different memory units</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
resources:
  requests:
    memory: 512Mi
  limits:
    memory: 2Gi
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>For more details about memory specification and additional supported units, see <a href="https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory" target="_blank" rel="noopener">Meaning of memory</a>.</p>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">CPU resources</dt>
<dd>
<p>A CPU request should be enough to give a reliable performance at any time.
CPU requests and limits are specified as <em>cores</em> or <em>millicpus</em>/<em>millicores</em>.</p>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>CPU cores are specified as integers (<code>5</code> CPU core) or decimals (<code>2.5</code> CPU core).
1000 <em>millicores</em> is the same as <code>1</code> CPU core.</p>
</div>
<div class="listingblock">
<div class="title">Example CPU units</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
resources:
  requests:
    cpu: 500m
  limits:
    cpu: 2.5
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>The computing power of 1 CPU core may differ depending on the platform where Kubernetes is deployed.</p>
</div>
<div class="paragraph">
<p>For more information on CPU specification, see <a href="https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu" target="_blank" rel="noopener">Meaning of CPU</a>.</p>
</div>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-images-reference"><a class="link" href="#con-common-configuration-images-reference">2.6. <code>image</code></a></h3>
<div class="paragraph">
<p>Use the <code>image</code> property to configure the container image used by the component.</p>
</div>
<div class="paragraph">
<p>Overriding container images is recommended only in special situations where you need to use a different container registry or a customized image.</p>
</div>
<div class="paragraph">
<p>For example, if your network does not allow access to the container repository used by Strimzi, you can copy the Strimzi images or build them from the source.
However, if the configured image is not compatible with Strimzi images, it might not work properly.</p>
</div>
<div class="paragraph">
<p>A copy of the container image might also be customized and used for debugging.</p>
</div>
<div class="paragraph">
<p>You can specify which container image to use for a component using the <code>image</code> property in the following resources:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>Kafka.spec.kafka</code></p>
</li>
<li>
<p><code>Kafka.spec.zookeeper</code></p>
</li>
<li>
<p><code>Kafka.spec.entityOperator.topicOperator</code></p>
</li>
<li>
<p><code>Kafka.spec.entityOperator.userOperator</code></p>
</li>
<li>
<p><code>Kafka.spec.entityOperator.tlsSidecar</code></p>
</li>
<li>
<p><code>Kafka.spec.cruiseControl</code></p>
</li>
<li>
<p><code>Kafka.spec.kafkaExporter</code></p>
</li>
<li>
<p><code>Kafka.spec.kafkaBridge</code></p>
</li>
<li>
<p><code>KafkaConnect.spec</code></p>
</li>
<li>
<p><code>KafkaMirrorMaker.spec</code></p>
</li>
<li>
<p><code>KafkaMirrorMaker2.spec</code></p>
</li>
<li>
<p><code>KafkaBridge.spec</code></p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Changing the Kafka image version does not automatically update the image versions for other Kafka components, such as Kafka Exporter.
These components are not version dependent, so no additional configuration is necessary when updating the Kafka image version.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p><strong>Configuring the <code>image</code> property for Kafka, Kafka Connect, and Kafka MirrorMaker</strong></p>
</div>
<div class="paragraph">
<p>Kafka, Kafka Connect, and Kafka MirrorMaker support multiple versions of Kafka.
Each component requires its own image.
The default images for the different Kafka versions are configured in the following environment variables:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>STRIMZI_KAFKA_IMAGES</code></p>
</li>
<li>
<p><code>STRIMZI_KAFKA_CONNECT_IMAGES</code></p>
</li>
<li>
<p><code>STRIMZI_KAFKA_MIRROR_MAKER2_IMAGES</code></p>
</li>
<li>
<p>(Deprecated) <code>STRIMZI_KAFKA_MIRROR_MAKER_IMAGES</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>These environment variables contain mappings between Kafka versions and corresponding images.
The mappings are used together with the <code>image</code> and <code>version</code> properties to determine the image used:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If neither <code>image</code> nor <code>version</code> are given in the custom resource, the <code>version</code> defaults to the Cluster Operator&#8217;s default Kafka version, and the image used is the one corresponding to this version in the environment variable.</p>
</li>
<li>
<p>If <code>image</code> is given but <code>version</code> is not, then the given image is used and the <code>version</code> is assumed to be the Cluster Operator&#8217;s default Kafka version.</p>
</li>
<li>
<p>If <code>version</code> is given but <code>image</code> is not, then the image that corresponds to the given version in the environment variable is used.</p>
</li>
<li>
<p>If both <code>version</code> and <code>image</code> are given, then the given image is used. The image is assumed to contain a Kafka image with the given version.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The <code>image</code> and <code>version</code> for the components can be configured in the following properties:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>For Kafka in <code>spec.kafka.image</code> and <code>spec.kafka.version</code>.</p>
</li>
<li>
<p>For Kafka Connect and Kafka MirrorMaker in <code>spec.image</code> and <code>spec.version</code>.</p>
</li>
</ul>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">
It is recommended to provide only the <code>version</code> and leave the <code>image</code> property unspecified.
This reduces the chance of making a mistake when configuring the custom resource.
If you need to change the images used for different versions of Kafka, it is preferable to configure the Cluster Operator&#8217;s environment variables.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p><strong>Configuring the <code>image</code> property in other resources</strong></p>
</div>
<div class="paragraph">
<p>For the <code>image</code> property in the custom resources for other components, the given value is used during deployment.
If the <code>image</code> property is not set, the container <code>image</code> specified as an environment variable in the Cluster Operator configuration is used.
If an <code>image</code> name is not defined in the Cluster Operator configuration, then a default value is used.</p>
</div>
<div class="paragraph">
<p>For more information on image environment variables, see <a href="./deploying.html#con-common-configuration-images-reference" target="_blank" rel="noopener">Configuring the Cluster Operator</a>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 1. Image environment variables and defaults</caption>
<colgroup>
<col style="width: 20%;">
<col style="width: 40%;">
<col style="width: 40%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Component</th>
<th class="tableblock halign-left valign-top">Environment variable</th>
<th class="tableblock halign-left valign-top">Default image</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Topic Operator</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/strimzi/operator:0.40.0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">User Operator</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STRIMZI_DEFAULT_USER_OPERATOR_IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/strimzi/operator:0.40.0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Entity Operator TLS sidecar</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/strimzi/kafka:0.40.0-kafka-3.7.0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kafka Exporter</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/strimzi/kafka:0.40.0-kafka-3.7.0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Cruise Control</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STRIMZI_DEFAULT_CRUISE_CONTROL_IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/strimzi/kafka:0.40.0-kafka-3.7.0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kafka Bridge</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STRIMZI_DEFAULT_KAFKA_BRIDGE_IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/strimzi/kafka-bridge:0.28.0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kafka initializer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>STRIMZI_DEFAULT_KAFKA_INIT_IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/strimzi/operator:0.40.0</code></p></td>
</tr>
</tbody>
</table>
<div class="listingblock">
<div class="title">Example container image configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    image: my-org/my-image:latest
    # ...
  zookeeper:
    # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-healthchecks-reference"><a class="link" href="#con-common-configuration-healthchecks-reference">2.7. <code>livenessProbe</code> and <code>readinessProbe</code> healthchecks</a></h3>
<div class="paragraph">
<p>Use the <code>livenessProbe</code> and <code>readinessProbe</code> properties to configure healthcheck probes supported in Strimzi.</p>
</div>
<div class="paragraph">
<p>Healthchecks are periodical tests which verify the health of an application.
When a Healthcheck probe fails, Kubernetes assumes that the application is not healthy and attempts to fix it.</p>
</div>
<div class="paragraph">
<p>For more details about the probes, see <a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/" target="_blank" rel="noopener">Configure Liveness and Readiness Probes</a>.</p>
</div>
<div class="paragraph">
<p>Both <code>livenessProbe</code> and <code>readinessProbe</code> support the following options:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>initialDelaySeconds</code></p>
</li>
<li>
<p><code>timeoutSeconds</code></p>
</li>
<li>
<p><code>periodSeconds</code></p>
</li>
<li>
<p><code>successThreshold</code></p>
</li>
<li>
<p><code>failureThreshold</code></p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example of liveness and readiness probe configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
readinessProbe:
  initialDelaySeconds: 15
  timeoutSeconds: 5
livenessProbe:
  initialDelaySeconds: 15
  timeoutSeconds: 5
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>For more information about the <code>livenessProbe</code> and <code>readinessProbe</code> options, see the <a href="#type-Probe-reference">Probe schema reference</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-prometheus-reference"><a class="link" href="#con-common-configuration-prometheus-reference">2.8. <code>metricsConfig</code></a></h3>
<div class="paragraph">
<p>Use the <code>metricsConfig</code> property to enable and configure Prometheus metrics.</p>
</div>
<div class="paragraph">
<p>The <code>metricsConfig</code> property contains a reference to a ConfigMap that has additional configurations for the <a href="https://github.com/prometheus/jmx_exporter" target="_blank" rel="noopener">Prometheus JMX Exporter</a>.
Strimzi supports Prometheus metrics using Prometheus JMX exporter to convert the JMX metrics supported by Apache Kafka and ZooKeeper to Prometheus metrics.</p>
</div>
<div class="paragraph">
<p>To enable Prometheus metrics export without further configuration, you can reference a ConfigMap containing an empty file under <code>metricsConfig.valueFrom.configMapKeyRef.key</code>.
When referencing an empty file, all metrics are exposed as long as they have not been renamed.</p>
</div>
<div class="listingblock">
<div class="title">Example ConfigMap with metrics configuration for Kafka</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">kind: ConfigMap
apiVersion: v1
metadata:
  name: my-configmap
data:
  my-key: |
    lowercaseOutputName: true
    rules:
    # Special cases and very specific rules
    - pattern: kafka.server&lt;type=(.+), name=(.+), clientId=(.+), topic=(.+), partition=(.*)&gt;&lt;&gt;Value
      name: kafka_server_$1_$2
      type: GAUGE
      labels:
       clientId: "$3"
       topic: "$4"
       partition: "$5"
    # further configuration</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Example metrics configuration for Kafka</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    metricsConfig:
      type: jmxPrometheusExporter
      valueFrom:
        configMapKeyRef:
          name: my-config-map
          key: my-key
    # ...
  zookeeper:
    # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>When metrics are enabled, they are exposed on port 9404.</p>
</div>
<div class="paragraph">
<p>When the <code>metricsConfig</code> (or deprecated <code>metrics</code>) property is not defined in the resource, the Prometheus metrics are disabled.</p>
</div>
<div class="paragraph">
<p>For more information about setting up and deploying Prometheus and Grafana, see <a href="./deploying.html#assembly-metrics-str" target="_blank" rel="noopener">Introducing Metrics to Kafka</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-jvm-reference"><a class="link" href="#con-common-configuration-jvm-reference">2.9. <code>jvmOptions</code></a></h3>
<div class="paragraph">
<p>The following Strimzi components run inside a Java Virtual Machine (JVM):</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Apache Kafka</p>
</li>
<li>
<p>Apache ZooKeeper</p>
</li>
<li>
<p>Apache Kafka Connect</p>
</li>
<li>
<p>Apache Kafka MirrorMaker</p>
</li>
<li>
<p>Strimzi Kafka Bridge</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>To optimize their performance on different platforms and architectures, you configure the <code>jvmOptions</code> property in the following resources:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>Kafka.spec.kafka</code></p>
</li>
<li>
<p><code>Kafka.spec.zookeeper</code></p>
</li>
<li>
<p><code>Kafka.spec.entityOperator.userOperator</code></p>
</li>
<li>
<p><code>Kafka.spec.entityOperator.topicOperator</code></p>
</li>
<li>
<p><code>Kafka.spec.cruiseControl</code></p>
</li>
<li>
<p><code>KafkaNodePool.spec</code></p>
</li>
<li>
<p><code>KafkaConnect.spec</code></p>
</li>
<li>
<p><code>KafkaMirrorMaker.spec</code></p>
</li>
<li>
<p><code>KafkaMirrorMaker2.spec</code></p>
</li>
<li>
<p><code>KafkaBridge.spec</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You can specify the following options in your configuration:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>-Xms</code></dt>
<dd>
<p>Minimum initial allocation heap size when the JVM starts</p>
</dd>
<dt class="hdlist1"><code>-Xmx</code></dt>
<dd>
<p>Maximum heap size</p>
</dd>
<dt class="hdlist1"><code>-XX</code></dt>
<dd>
<p>Advanced runtime options for the JVM</p>
</dd>
<dt class="hdlist1"><code>javaSystemProperties</code></dt>
<dd>
<p>Additional system properties</p>
</dd>
<dt class="hdlist1"><code>gcLoggingEnabled</code></dt>
<dd>
<p><a href="#con-common-configuration-garbage-collection-reference">Enables garbage collector logging</a></p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The units accepted by JVM settings, such as <code>-Xmx</code> and <code>-Xms</code>, are the same units accepted by the JDK <code>java</code> binary in the corresponding image.
Therefore, <code>1g</code> or <code>1G</code> means 1,073,741,824 bytes, and <code>Gi</code> is not a valid unit suffix.
This is different from the units used for <a href="#con-common-configuration-resources-reference">memory requests and limits</a>, which follow the Kubernetes convention where <code>1G</code> means 1,000,000,000 bytes, and <code>1Gi</code> means 1,073,741,824 bytes.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<div class="title"><code>-Xms</code> and <code>-Xmx</code> options</div>
<p>In addition to setting memory request and limit values for your containers, you can use the <code>-Xms</code> and <code>-Xmx</code> JVM options to set specific heap sizes for your JVM.
Use the <code>-Xms</code> option to set an initial heap size and the <code>-Xmx</code> option to set a maximum heap size.</p>
</div>
<div class="paragraph">
<p>Specify heap size to have more control over the memory allocated to your JVM.
Heap sizes should make the best use of a container&#8217;s <a href="#con-common-configuration-resources-reference">memory limit (and request)</a> without exceeding it.
Heap size and any other memory requirements need to fit within a specified memory limit.
If you don&#8217;t specify heap size in your configuration, but you configure a memory resource limit (and request), the Cluster Operator imposes default heap sizes automatically.
The Cluster Operator sets default maximum and minimum heap values based on a percentage of the memory resource configuration.</p>
</div>
<div class="paragraph">
<p>The following table shows the default heap values.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 2. Default heap settings for components</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 25%;">
<col style="width: 25%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Component</th>
<th class="tableblock halign-left valign-top">Percent of available memory allocated to the heap</th>
<th class="tableblock halign-left valign-top">Maximum limit</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kafka</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">50%</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">5 GB</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ZooKeeper</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">75%</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2 GB</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kafka Connect</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">75%</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">None</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MirrorMaker 2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">75%</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">None</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MirrorMaker</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">75%</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">None</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Cruise Control</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">75%</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">None</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kafka Bridge</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">50%</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">31 Gi</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>If a memory limit (and request) is not specified, a JVM&#8217;s minimum heap size is set to <code>128M</code>.
The JVM&#8217;s maximum heap size is not defined to allow the memory to increase as needed.
This is ideal for single node environments in test and development.</p>
</div>
<div class="paragraph">
<p>Setting an appropriate memory request can prevent the following:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kubernetes killing a container if there is pressure on memory from other pods running on the node.</p>
</li>
<li>
<p>Kubernetes scheduling a container to a node with insufficient memory.
If <code>-Xms</code> is set to <code>-Xmx</code>, the container will crash immediately; if not, the container will crash at a later time.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>In this example, the JVM uses 2 GiB (=2,147,483,648 bytes) for its heap.
Total JVM memory usage can be a lot more than the maximum heap size.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>-Xmx</code> and <code>-Xms</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
jvmOptions:
  "-Xmx": "2g"
  "-Xms": "2g"
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>Setting the same value for initial (<code>-Xms</code>) and maximum (<code>-Xmx</code>) heap sizes avoids the JVM having to allocate memory after startup, at the cost of possibly allocating more heap than is really needed.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
Containers performing lots of disk I/O, such as Kafka broker containers, require available memory for use as an operating system page cache.
For such containers, the requested memory should be significantly higher than the memory used by the JVM.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<div class="title">-XX option</div>
<p><code>-XX</code> options are used to configure the <code>KAFKA_JVM_PERFORMANCE_OPTS</code> option of Apache Kafka.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>-XX</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">jvmOptions:
  "-XX":
    "UseG1GC": true
    "MaxGCPauseMillis": 20
    "InitiatingHeapOccupancyPercent": 35
    "ExplicitGCInvokesConcurrent": true</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">JVM options resulting from the <code>-XX</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:-UseParNewGC</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
When no <code>-XX</code> options are specified, the default Apache Kafka configuration of <code>KAFKA_JVM_PERFORMANCE_OPTS</code> is used.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<div class="title"><code>javaSystemProperties</code></div>
<p><code>javaSystemProperties</code> are used to configure additional Java system properties, such as debugging utilities.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>javaSystemProperties</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">jvmOptions:
  javaSystemProperties:
    - name: javax.net.debug
      value: ssl</code></pre>
</div>
</div>
<div class="paragraph">
<p>For more information about the <code>jvmOptions</code>, see the <a href="#type-JvmOptions-reference"><code>JvmOptions</code> schema reference</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="con-common-configuration-garbage-collection-reference"><a class="link" href="#con-common-configuration-garbage-collection-reference">2.10. Garbage collector logging</a></h3>
<div class="paragraph">
<p>The <code>jvmOptions</code> property also allows you to enable and disable garbage collector (GC) logging.
GC logging is disabled by default.
To enable it, set the <code>gcLoggingEnabled</code> property as follows:</p>
</div>
<div class="listingblock">
<div class="title">Example GC logging configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
jvmOptions:
  gcLoggingEnabled: true
# ...</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-Kafka-reference"><a class="link" href="#type-Kafka-reference">3. <code>Kafka</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka and ZooKeeper clusters, and Topic Operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaStatus-reference"><code>KafkaStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the Kafka and ZooKeeper clusters, and Topic Operator.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaSpec-reference"><a class="link" href="#type-KafkaSpec-reference">4. <code>KafkaSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Kafka-reference"><code>Kafka</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafka</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">zookeeper</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the ZooKeeper cluster. This section is required when running a ZooKeeper-based Apache Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">entityOperator</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EntityOperatorSpec-reference"><code>EntityOperatorSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the Entity Operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusterCa</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertificateAuthority-reference"><code>CertificateAuthority</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the cluster certificate authority.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientsCa</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertificateAuthority-reference"><code>CertificateAuthority</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the clients certificate authority.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">cruiseControl</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration for Cruise Control deployment. Deploys a Cruise Control instance when specified.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxTrans</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxTransSpec-reference"><code>JmxTransSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>jmxTrans</code> property has been deprecated.</strong> JMXTrans is deprecated and related resources removed in Strimzi 0.35.0. As of Strimzi 0.35.0, JMXTrans is not supported anymore and this option is ignored.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaExporter</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaExporterSpec-reference"><code>KafkaExporterSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the Kafka Exporter. Kafka Exporter can provide additional metrics, for example lag of consumer group at topic/partition.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maintenanceTimeWindows</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of time windows for maintenance tasks (that is, certificates renewal). Each time window is defined by a cron expression.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaClusterSpec-reference"><a class="link" href="#type-KafkaClusterSpec-reference">5. <code>KafkaClusterSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaClusterSpec-schema-reference">Full list of <code>KafkaClusterSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a Kafka cluster.</p>
</div>
<div class="sect2">
<h3 id="property-kafka-listeners-reference"><a class="link" href="#property-kafka-listeners-reference">5.1. <code>listeners</code></a></h3>
<div class="paragraph">
<p>Use the <code>listeners</code> property to configure listeners to provide access to Kafka brokers.</p>
</div>
<div class="listingblock">
<div class="title">Example configuration of a plain (unencrypted) listener without authentication</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
  kafka:
    # ...
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
    # ...
  zookeeper:
    # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-kafka-config-reference"><a class="link" href="#property-kafka-config-reference">5.2. <code>config</code></a></h3>
<div class="paragraph">
<p>Use the <code>config</code> properties to configure Kafka broker options as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://kafka.apache.org/documentation/#brokerconfigs" target="_blank" rel="noopener">Apache Kafka documentation</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Listener configuration</p>
</li>
<li>
<p>Broker ID configuration</p>
</li>
<li>
<p>Configuration of log data directories</p>
</li>
<li>
<p>Inter-broker communication</p>
</li>
<li>
<p>ZooKeeper connectivity</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>advertised.</code></p>
</li>
<li>
<p><code>authorizer.</code></p>
</li>
<li>
<p><code>broker.</code></p>
</li>
<li>
<p><code>controller</code></p>
</li>
<li>
<p><code>cruise.control.metrics.reporter.bootstrap.</code></p>
</li>
<li>
<p><code>cruise.control.metrics.topic</code></p>
</li>
<li>
<p><code>host.name</code></p>
</li>
<li>
<p><code>inter.broker.listener.name</code></p>
</li>
<li>
<p><code>listener.</code></p>
</li>
<li>
<p><code>listeners.</code></p>
</li>
<li>
<p><code>log.dir</code></p>
</li>
<li>
<p><code>password.</code></p>
</li>
<li>
<p><code>port</code></p>
</li>
<li>
<p><code>process.roles</code></p>
</li>
<li>
<p><code>sasl.</code></p>
</li>
<li>
<p><code>security.</code></p>
</li>
<li>
<p><code>servers,node.id</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
<li>
<p><code>super.user</code></p>
</li>
<li>
<p><code>zookeeper.clientCnxnSocket</code></p>
</li>
<li>
<p><code>zookeeper.connect</code></p>
</li>
<li>
<p><code>zookeeper.set.acl</code></p>
</li>
<li>
<p><code>zookeeper.ssl</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to Kafka, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
<li>
<p>Configuration for the <code>zookeeper.connection.timeout.ms</code> property to set the maximum time allowed for establishing a ZooKeeper connection</p>
</li>
<li>
<p>Cruise Control metrics properties:</p>
<div class="ulist">
<ul>
<li>
<p><code>cruise.control.metrics.topic.num.partitions</code></p>
</li>
<li>
<p><code>cruise.control.metrics.topic.replication.factor</code></p>
</li>
<li>
<p><code>cruise.control.metrics.topic.retention.ms</code></p>
</li>
<li>
<p><code>cruise.control.metrics.topic.auto.create.retries</code></p>
</li>
<li>
<p><code>cruise.control.metrics.topic.auto.create.timeout.ms</code></p>
</li>
<li>
<p><code>cruise.control.metrics.topic.min.insync.replicas</code></p>
</li>
</ul>
</div>
</li>
<li>
<p>Controller properties:</p>
<div class="ulist">
<ul>
<li>
<p><code>controller.quorum.election.backoff.max.ms</code></p>
</li>
<li>
<p><code>controller.quorum.election.timeout.ms</code></p>
</li>
<li>
<p><code>controller.quorum.fetch.timeout.ms</code></p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example Kafka broker configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    config:
      num.partitions: 1
      num.recovery.threads.per.data.dir: 1
      default.replication.factor: 3
      offsets.topic.replication.factor: 3
      transaction.state.log.replication.factor: 3
      transaction.state.log.min.isr: 1
      log.retention.hours: 168
      log.segment.bytes: 1073741824
      log.retention.check.interval.ms: 300000
      num.network.threads: 3
      num.io.threads: 8
      socket.send.buffer.bytes: 102400
      socket.receive.buffer.bytes: 102400
      socket.request.max.bytes: 104857600
      group.initial.rebalance.delay.ms: 0
      zookeeper.connection.timeout.ms: 6000
    # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-kafka-brokerRackInitImage-reference"><a class="link" href="#property-kafka-brokerRackInitImage-reference">5.3. <code>brokerRackInitImage</code></a></h3>
<div class="paragraph">
<p>When rack awareness is enabled, Kafka broker pods use init container to collect the labels from the Kubernetes cluster nodes.
The container image used for this container can be configured using the <code>brokerRackInitImage</code> property.
When the <code>brokerRackInitImage</code> field is missing, the following images are used in order of priority:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Container image specified in <code>STRIMZI_DEFAULT_KAFKA_INIT_IMAGE</code> environment variable in the Cluster Operator configuration.</p>
</li>
<li>
<p><code>quay.io/strimzi/operator:0.40.0</code> container image.</p>
</li>
</ol>
</div>
<div class="listingblock">
<div class="title">Example <code>brokerRackInitImage</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    rack:
      topologyKey: topology.kubernetes.io/zone
    brokerRackInitImage: my-org/my-image:latest
    # ...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Overriding container images is recommended only in special situations, where you need to use a different container registry.
For example, because your network does not allow access to the container registry used by Strimzi. In this case, you should either copy the Strimzi images or build them from the source.
If the configured image is not compatible with Strimzi images, it might not work properly.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="property-kafka-logging-reference"><a class="link" href="#property-kafka-logging-reference">5.4. <code>logging</code></a></h3>
<div class="paragraph">
<p>Kafka has its own configurable loggers, which include the following:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>log4j.logger.org.I0Itec.zkclient.ZkClient</code></p>
</li>
<li>
<p><code>log4j.logger.org.apache.zookeeper</code></p>
</li>
<li>
<p><code>log4j.logger.kafka</code></p>
</li>
<li>
<p><code>log4j.logger.org.apache.kafka</code></p>
</li>
<li>
<p><code>log4j.logger.kafka.request.logger</code></p>
</li>
<li>
<p><code>log4j.logger.kafka.network.Processor</code></p>
</li>
<li>
<p><code>log4j.logger.kafka.server.KafkaApis</code></p>
</li>
<li>
<p><code>log4j.logger.kafka.network.RequestChannel$</code></p>
</li>
<li>
<p><code>log4j.logger.kafka.controller</code></p>
</li>
<li>
<p><code>log4j.logger.kafka.log.LogCleaner</code></p>
</li>
<li>
<p><code>log4j.logger.state.change.logger</code></p>
</li>
<li>
<p><code>log4j.logger.kafka.authorizer.logger</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Kafka uses the Apache <code>log4j</code> logger implementation.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration. Inside the ConfigMap, the logging configuration is described using <code>log4j.properties</code>. Both <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory. A ConfigMap using the exact logging configuration specified is created with the custom resource when the Cluster Operator is running, then recreated after each reconciliation. If you do not specify a custom ConfigMap, default logging settings are used. If a specific logger value is not set, upper-level logger settings are inherited for that logger.
For more information about log levels, see <a href="https://logging.apache.org/" target="_blank" rel="noopener">Apache logging services</a>.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.
The <code>inline</code> logging specifies the root logger level.
You can also set log levels for specific classes or loggers by adding them to the loggers property.</p>
</div>
<div class="listingblock">
<div class="title">Inline logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
  # ...
  kafka:
    # ...
    logging:
      type: inline
      loggers:
        kafka.root.logger.level: INFO
        log4j.logger.kafka.coordinator.transaction: TRACE
        log4j.logger.kafka.log.LogCleanerManager: DEBUG
        log4j.logger.kafka.request.logger: DEBUG
        log4j.logger.io.strimzi.kafka.oauth: DEBUG
        log4j.logger.org.openpolicyagents.kafka.OpaAuthorizer: DEBUG
  # ...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Setting a log level to <code>DEBUG</code> may result in a large amount of log output and may have performance implications.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">External logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
  # ...
  logging:
    type: external
    valueFrom:
      configMapKeyRef:
        name: customConfigMap
        key: kafka-log4j.properties
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>Any available loggers that are not configured have their level set to <code>OFF</code>.</p>
</div>
<div class="paragraph">
<p>If Kafka was deployed using the Cluster Operator,
changes to Kafka logging levels are applied dynamically.</p>
</div>
<div class="paragraph">
<p>If you use external logging, a rolling update is triggered when logging appenders are changed.</p>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaClusterSpec-schema-reference"><a class="link" href="#type-KafkaClusterSpec-schema-reference">5.5. <code>KafkaClusterSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka broker version. Defaults to the latest version. Consult the user documentation to understand the process required to upgrade or downgrade the version.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadataVersion</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Added in Strimzi 0.39.0. The KRaft metadata version used by the Kafka cluster. This property is ignored when running in ZooKeeper mode. If the property is not set, it defaults to the metadata version that corresponds to the <code>version</code> property.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of pods in the cluster. This property is required when node pools are not used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for Kafka pods. If the property is not set, the default Kafka image version is determined based on the <code>version</code> configuration. The image names are specifically mapped to corresponding versions in the Cluster Operator configuration. Changing the Kafka image version does not automatically update the image versions for other components, such as Kafka Exporter.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">listeners</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericKafkaListener-reference"><code>GenericKafkaListener</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures listeners of Kafka brokers.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kafka broker config properties with the following prefixes cannot be set: listeners, advertised., broker., listener., host.name, port, inter.broker.listener.name, sasl., ssl., security., password., log.dir, zookeeper.connect, zookeeper.set.acl, zookeeper.ssl, zookeeper.clientCnxnSocket, authorizer., super.user, cruise.control.metrics.topic, cruise.control.metrics.reporter.bootstrap.servers, node.id, process.roles, controller., metadata.log.dir, zookeeper.metadata.migration.enable (with the exception of: zookeeper.connection.timeout.ms, sasl.server.max.receive.size, ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols, ssl.secure.random.implementation, cruise.control.metrics.topic.num.partitions, cruise.control.metrics.topic.replication.factor, cruise.control.metrics.topic.retention.ms, cruise.control.metrics.topic.auto.create.retries, cruise.control.metrics.topic.auto.create.timeout.ms, cruise.control.metrics.topic.min.insync.replicas, controller.quorum.election.backoff.max.ms, controller.quorum.election.timeout.ms, controller.quorum.fetch.timeout.ms).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">storage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EphemeralStorage-reference"><code>EphemeralStorage</code></a>, <a href="#type-PersistentClaimStorage-reference"><code>PersistentClaimStorage</code></a>, <a href="#type-JbodStorage-reference"><code>JbodStorage</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Storage configuration (disk). Cannot be updated. This property is required when node pools are not used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authorization</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaAuthorizationSimple-reference"><code>KafkaAuthorizationSimple</code></a>, <a href="#type-KafkaAuthorizationOpa-reference"><code>KafkaAuthorizationOpa</code></a>, <a href="#type-KafkaAuthorizationKeycloak-reference"><code>KafkaAuthorizationKeycloak</code></a>, <a href="#type-KafkaAuthorizationCustom-reference"><code>KafkaAuthorizationCustom</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authorization configuration for Kafka brokers.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">rack</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Rack-reference"><code>Rack</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the <code>broker.rack</code> broker config.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">brokerRackInitImage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The image of the init container used for initializing the <code>broker.rack</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaJmxOptions-reference"><code>KafkaJmxOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JMX Options for Kafka brokers.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metricsConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxPrometheusExporterMetrics-reference"><code>JmxPrometheusExporterMetrics</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metrics configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration for Kafka.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaClusterTemplate-reference"><code>KafkaClusterTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka cluster resources. The template allows users to specify how the Kubernetes resources are generated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tieredStorage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-TieredStorageCustom-reference"><code>TieredStorageCustom</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configure the tiered storage feature for Kafka brokers.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-GenericKafkaListener-reference"><a class="link" href="#type-GenericKafkaListener-reference">6. <code>GenericKafkaListener</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-GenericKafkaListener-schema-reference">Full list of <code>GenericKafkaListener</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures listeners to connect to Kafka brokers within and outside Kubernetes.</p>
</div>
<div class="paragraph">
<p>You configure the listeners in the <code>Kafka</code> resource.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>Kafka</code> resource showing listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    #...
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication:
          type: tls
      - name: external1
        port: 9094
        type: route
        tls: true
      - name: external2
        port: 9095
        type: ingress
        tls: true
        authentication:
          type: tls
        configuration:
          bootstrap:
            host: bootstrap.myingress.com
          brokers:
          - broker: 0
            host: broker-0.myingress.com
          - broker: 1
            host: broker-1.myingress.com
          - broker: 2
            host: broker-2.myingress.com
    #...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="property-generic-listeners-reference"><a class="link" href="#property-generic-listeners-reference">6.1. <code>listeners</code></a></h3>
<div class="paragraph">
<p>You configure Kafka broker listeners using the <code>listeners</code> property in the <code>Kafka</code> resource.
Listeners are defined as an array.</p>
</div>
<div class="listingblock">
<div class="title">Example listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  - name: plain
    port: 9092
    type: internal
    tls: false</code></pre>
</div>
</div>
<div class="paragraph">
<p>The name and port must be unique within the Kafka cluster.
By specifying a unique name and port for each listener,
you can configure multiple listeners.
The name can be up to 25 characters long, comprising lower-case letters and numbers.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-port-reference"><a class="link" href="#property-listener-port-reference">6.2. <code>port</code></a></h3>
<div class="paragraph">
<p>The port number is the port used in the Kafka cluster, which might not be the same port used for access by a client.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>loadbalancer</code> listeners use the specified port number, as do <code>internal</code> and <code>cluster-ip</code> listeners</p>
</li>
<li>
<p><code>ingress</code> and <code>route</code> listeners use port 443 for access</p>
</li>
<li>
<p><code>nodeport</code> listeners use the port number assigned by Kubernetes</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>For client connection, use the address and port for the bootstrap service of the listener.
You can retrieve this from the status of the <code>Kafka</code> resource.</p>
</div>
<div class="listingblock">
<div class="title">Example command to retrieve the address and port for client connection</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">kubectl get kafka <em>&lt;kafka_cluster_name&gt;</em> -o=jsonpath='{.status.listeners[?(@.name=="<em>&lt;listener_name&gt;</em>")].bootstrapServers}{"\n"}'</code></pre>
</div>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
When configuring listeners for client access to brokers, you can use port 9092 or higher (9093, 9094, and so on), but with a few exceptions.
The listeners cannot be configured to use the ports reserved for interbroker communication (9090 and 9091), Prometheus metrics (9404), and JMX (Java Management Extensions) monitoring (9999).
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="type"><a class="link" href="#type">6.3. <code>type</code></a></h3>
<div class="paragraph">
<p>The type is set as <code>internal</code>,
or for external listeners, as <code>route</code>, <code>loadbalancer</code>, <code>nodeport</code>, <code>ingress</code> or <code>cluster-ip</code>.
You can also configure a <code>cluster-ip</code> listener, a type of internal listener you can use to build custom access mechanisms.</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">internal</dt>
<dd>
<p>You can configure internal listeners with or without encryption using the <code>tls</code> property.</p>
<div class="listingblock">
<div class="title">Example <code>internal</code> listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">#...
spec:
  kafka:
    #...
    listeners:
      #...
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication:
          type: tls
    #...</code></pre>
</div>
</div>
</dd>
<dt class="hdlist1">route</dt>
<dd>
<p>Configures an external listener to expose Kafka using OpenShift <code>Routes</code> and the HAProxy router.</p>
<div class="paragraph">
<p>A dedicated <code>Route</code> is created for every Kafka broker pod.
An additional <code>Route</code> is created to serve as a Kafka bootstrap address.
Kafka clients can use these <code>Routes</code> to connect to Kafka on port 443.
The client connects on port 443, the default router port, but traffic is then routed to the port you configure,
which is <code>9094</code> in this example.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>route</code> listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">#...
spec:
  kafka:
    #...
    listeners:
      #...
      - name: external1
        port: 9094
        type: route
        tls: true
    #...</code></pre>
</div>
</div>
</dd>
<dt class="hdlist1">ingress</dt>
<dd>
<p>Configures an external listener to expose Kafka using Kubernetes <code>Ingress</code> and the <a href="https://github.com/kubernetes/ingress-nginx" target="_blank" rel="noopener">Ingress NGINX Controller for Kubernetes</a>.</p>
<div class="paragraph">
<p>A dedicated <code>Ingress</code> resource is created for every Kafka broker pod.
An additional <code>Ingress</code> resource is created to serve as a Kafka bootstrap address.
Kafka clients can use these <code>Ingress</code> resources to connect to Kafka on port 443.
The client connects on port 443, the default controller port, but traffic is then routed to the port you configure,
which is <code>9095</code> in the following example.</p>
</div>
<div class="paragraph">
<p>You must specify the hostnames used by the bootstrap and per-broker services
using <a href="#type-GenericKafkaListenerConfigurationBootstrap-reference"><code>GenericKafkaListenerConfigurationBootstrap</code></a>
and <a href="#type-GenericKafkaListenerConfigurationBroker-reference"><code>GenericKafkaListenerConfigurationBroker</code></a> properties.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>ingress</code> listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">#...
spec:
  kafka:
    #...
    listeners:
      #...
      - name: external2
        port: 9095
        type: ingress
        tls: true
        authentication:
          type: tls
        configuration:
          bootstrap:
            host: bootstrap.myingress.com
          brokers:
          - broker: 0
            host: broker-0.myingress.com
          - broker: 1
            host: broker-1.myingress.com
          - broker: 2
            host: broker-2.myingress.com
  #...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
External listeners using <code>Ingress</code> are currently only tested with the <a href="https://github.com/kubernetes/ingress-nginx" target="_blank" rel="noopener">Ingress NGINX Controller for Kubernetes</a>.
</td>
</tr>
</table>
</div>
</dd>
<dt class="hdlist1">loadbalancer</dt>
<dd>
<p>Configures an external listener to expose Kafka using a <code>Loadbalancer</code> type <code>Service</code>.</p>
<div class="paragraph">
<p>A new loadbalancer service is created for every Kafka broker pod.
An additional loadbalancer is created to serve as a Kafka <em>bootstrap</em> address.
Loadbalancers listen to the specified port number, which is port <code>9094</code> in the following example.</p>
</div>
<div class="paragraph">
<p>You can use the <code>loadBalancerSourceRanges</code> property to configure <a href="#property-listener-config-source-ranges-reference">source ranges</a> to restrict access to the specified IP addresses.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>loadbalancer</code> listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">#...
spec:
  kafka:
    #...
    listeners:
      - name: external3
        port: 9094
        type: loadbalancer
        tls: true
        configuration:
          loadBalancerSourceRanges:
            - 10.0.0.0/8
            - 88.208.76.87/32
    #...</code></pre>
</div>
</div>
</dd>
<dt class="hdlist1">nodeport</dt>
<dd>
<p>Configures an external listener to expose Kafka using a <code>NodePort</code> type <code>Service</code>.</p>
<div class="paragraph">
<p>Kafka clients connect directly to the nodes of Kubernetes.
An additional <code>NodePort</code> type of service is created to serve as a Kafka bootstrap address.</p>
</div>
<div class="paragraph">
<p>When configuring the advertised addresses for the Kafka broker pods, Strimzi uses the address of the node on which the given pod is running.
You can use <code>preferredNodePortAddressType</code> property to configure the <a href="#property-listener-config-preferredNodePortAddressType-reference">first address type checked as the node address</a>.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>nodeport</code> listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">#...
spec:
  kafka:
    #...
    listeners:
      #...
      - name: external4
        port: 9095
        type: nodeport
        tls: false
        configuration:
          preferredNodePortAddressType: InternalDNS
    #...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
TLS hostname verification is not currently supported when exposing Kafka clusters using node ports.
</td>
</tr>
</table>
</div>
</dd>
<dt class="hdlist1">cluster-ip</dt>
<dd>
<p>Configures an internal listener to expose Kafka using a per-broker <code>ClusterIP</code> type <code>Service</code>.</p>
<div class="paragraph">
<p>The listener does not use a headless service and its DNS names to route traffic to Kafka brokers.
You can use this type of listener to expose a Kafka cluster when using the headless service is unsuitable.
You might use it with a custom access mechanism, such as one that uses a specific Ingress controller or the Kubernetes Gateway API.</p>
</div>
<div class="paragraph">
<p>A new <code>ClusterIP</code> service is created for each Kafka broker pod.
The service is assigned a <code>ClusterIP</code> address to serve as a Kafka <em>bootstrap</em> address with a per-broker port number.
For example, you can configure the listener to expose a Kafka cluster over an Nginx Ingress Controller with TCP port configuration.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>cluster-ip</code> listener configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">#...
spec:
  kafka:
    #...
    listeners:
      - name: clusterip
        type: cluster-ip
        tls: false
        port: 9096
    #...</code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-tls-reference"><a class="link" href="#property-listener-tls-reference">6.4. <code>tls</code></a></h3>
<div class="paragraph">
<p>The TLS property is required.</p>
</div>
<div class="paragraph">
<p>By default, TLS encryption is not enabled.
To enable it, set the <code>tls</code> property to <code>true</code>.</p>
</div>
<div class="paragraph">
<p>For <code>route</code> and <code>ingress</code> type listeners, TLS encryption must be enabled.</p>
</div>
</div>
<div class="sect2">
<h3 id="authentication"><a class="link" href="#authentication">6.5. <code>authentication</code></a></h3>
<div class="paragraph">
<p>Authentication for the listener can be specified as:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>mTLS (<code>tls</code>)</p>
</li>
<li>
<p>SCRAM-SHA-512 (<code>scram-sha-512</code>)</p>
</li>
<li>
<p>Token-based OAuth 2.0 (<code>oauth</code>)</p>
</li>
<li>
<p><a href="#type-KafkaListenerAuthenticationCustom-reference">Custom (<code>custom</code>)</a></p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="configuration-listener-network-policy-reference"><a class="link" href="#configuration-listener-network-policy-reference">6.6. <code>networkPolicyPeers</code></a></h3>
<div class="paragraph">
<p>Use <code>networkPolicyPeers</code> to configure network policies that restrict access to a listener at the network level.
The following example shows a <code>networkPolicyPeers</code> configuration for a <code>plain</code> and a <code>tls</code> listener.</p>
</div>
<div class="paragraph">
<p>In the following example:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Only application pods matching the labels <code>app: kafka-sasl-consumer</code> and <code>app: kafka-sasl-producer</code> can connect to the <code>plain</code> listener.
The application pods must be running in the same namespace as the Kafka broker.</p>
</li>
<li>
<p>Only application pods running in namespaces matching the labels <code>project: myproject</code> and <code>project: myproject2</code> can connect to the <code>tls</code> listener.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The syntax of the <code>networkPolicyPeers</code> property is the same as the <code>from</code> property in <code>NetworkPolicy</code> resources.</p>
</div>
<div class="listingblock">
<div class="title">Example network policy configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: plain
    port: 9092
    type: internal
    tls: true
    authentication:
      type: scram-sha-512
    networkPolicyPeers:
      - podSelector:
          matchLabels:
            app: kafka-sasl-consumer
      - podSelector:
          matchLabels:
            app: kafka-sasl-producer
  - name: tls
    port: 9093
    type: internal
    tls: true
    authentication:
      type: tls
    networkPolicyPeers:
      - namespaceSelector:
          matchLabels:
            project: myproject
      - namespaceSelector:
          matchLabels:
            project: myproject2
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-GenericKafkaListener-schema-reference"><a class="link" href="#type-GenericKafkaListener-schema-reference">6.7. <code>GenericKafkaListener</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name of the listener. The name will be used to identify the listener and the related Kubernetes objects. The name has to be unique within given a Kafka cluster. The name can consist of lowercase characters and numbers and be up to 11 characters long.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">port</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Port number used by the listener inside Kafka. The port number has to be unique within a given Kafka cluster. Allowed port numbers are 9092 and higher with the exception of ports 9404 and 9999, which are already used for Prometheus and JMX. Depending on the listener type, the port number might not be the same as the port number that connects Kafka clients.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [ingress, internal, route, loadbalancer, cluster-ip, nodeport])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Type of the listener. The supported types are as follows:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>internal</code> type exposes Kafka internally only within the Kubernetes cluster.</p>
</li>
<li>
<p><code>route</code> type uses OpenShift Routes to expose Kafka.</p>
</li>
<li>
<p><code>loadbalancer</code> type uses LoadBalancer type services to expose Kafka.</p>
</li>
<li>
<p><code>nodeport</code> type uses NodePort type services to expose Kafka.</p>
</li>
<li>
<p><code>ingress</code> type uses Kubernetes Nginx Ingress to expose Kafka with TLS passthrough.</p>
</li>
<li>
<p><code>cluster-ip</code> type uses a per-broker <code>ClusterIP</code> service.</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enables TLS encryption on the listener. This is a required property.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaListenerAuthenticationTls-reference"><code>KafkaListenerAuthenticationTls</code></a>, <a href="#type-KafkaListenerAuthenticationScramSha512-reference"><code>KafkaListenerAuthenticationScramSha512</code></a>, <a href="#type-KafkaListenerAuthenticationOAuth-reference"><code>KafkaListenerAuthenticationOAuth</code></a>, <a href="#type-KafkaListenerAuthenticationCustom-reference"><code>KafkaListenerAuthenticationCustom</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication configuration for this listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configuration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericKafkaListenerConfiguration-reference"><code>GenericKafkaListenerConfiguration</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Additional listener configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">networkPolicyPeers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#networkpolicypeer-v1-networking-k8s-io">NetworkPolicyPeer</a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of peers which should be able to connect to this listener. Peers in this list are combined using a logical OR operation. If this field is empty or missing, all connections will be allowed for this listener. If this field is present and contains at least one item, the listener only allows the traffic which matches at least one item in this list.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaListenerAuthenticationTls-reference"><a class="link" href="#type-KafkaListenerAuthenticationTls-reference">7. <code>KafkaListenerAuthenticationTls</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListener-reference"><code>GenericKafkaListener</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaListenerAuthenticationTls</code> type from <a href="#type-KafkaListenerAuthenticationScramSha512-reference"><code>KafkaListenerAuthenticationScramSha512</code></a>, <a href="#type-KafkaListenerAuthenticationOAuth-reference"><code>KafkaListenerAuthenticationOAuth</code></a>, <a href="#type-KafkaListenerAuthenticationCustom-reference"><code>KafkaListenerAuthenticationCustom</code></a>.
It must have the value <code>tls</code> for the type <code>KafkaListenerAuthenticationTls</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>tls</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaListenerAuthenticationScramSha512-reference"><a class="link" href="#type-KafkaListenerAuthenticationScramSha512-reference">8. <code>KafkaListenerAuthenticationScramSha512</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListener-reference"><code>GenericKafkaListener</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaListenerAuthenticationScramSha512</code> type from <a href="#type-KafkaListenerAuthenticationTls-reference"><code>KafkaListenerAuthenticationTls</code></a>, <a href="#type-KafkaListenerAuthenticationOAuth-reference"><code>KafkaListenerAuthenticationOAuth</code></a>, <a href="#type-KafkaListenerAuthenticationCustom-reference"><code>KafkaListenerAuthenticationCustom</code></a>.
It must have the value <code>scram-sha-512</code> for the type <code>KafkaListenerAuthenticationScramSha512</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>scram-sha-512</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaListenerAuthenticationOAuth-reference"><a class="link" href="#type-KafkaListenerAuthenticationOAuth-reference">9. <code>KafkaListenerAuthenticationOAuth</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListener-reference"><code>GenericKafkaListener</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaListenerAuthenticationOAuth</code> type from <a href="#type-KafkaListenerAuthenticationTls-reference"><code>KafkaListenerAuthenticationTls</code></a>, <a href="#type-KafkaListenerAuthenticationScramSha512-reference"><code>KafkaListenerAuthenticationScramSha512</code></a>, <a href="#type-KafkaListenerAuthenticationCustom-reference"><code>KafkaListenerAuthenticationCustom</code></a>.
It must have the value <code>oauth</code> for the type <code>KafkaListenerAuthenticationOAuth</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">accessTokenIsJwt</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configure whether the access token is treated as JWT. This must be set to <code>false</code> if the authorization server returns opaque tokens. Defaults to <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">checkAccessTokenType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configure whether the access token type check is performed or not. This should be set to <code>false</code> if the authorization server does not include 'typ' claim in JWT token. Defaults to <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">checkAudience</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable audience checking. Audience checks identify the recipients of tokens. If audience checking is enabled, the OAuth Client ID also has to be configured using the <code>clientId</code> property. The Kafka broker will reject tokens that do not have its <code>clientId</code> in their <code>aud</code> (audience) claim.Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">checkIssuer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable issuer checking. By default issuer is checked using the value configured by <code>validIssuerUri</code>. Default value is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientAudience</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The audience to use when making requests to the authorization server&#8217;s token endpoint. Used for inter-broker authentication and for configuring OAuth 2.0 over PLAIN using the <code>clientId</code> and <code>secret</code> method.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>OAuth Client ID which the Kafka broker can use to authenticate against the authorization server and use the introspect endpoint URI.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientScope</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The scope to use when making requests to the authorization server&#8217;s token endpoint. Used for inter-broker authentication and for configuring OAuth 2.0 over PLAIN using the <code>clientId</code> and <code>secret</code> method.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericSecretSource-reference"><code>GenericSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Link to Kubernetes Secret containing the OAuth client secret which the Kafka broker can use to authenticate against the authorization server and use the introspect endpoint URI.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The connect timeout in seconds when connecting to authorization server. If not set, the effective connect timeout is 60 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">customClaimCheck</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JsonPath filter query to be applied to the JWT token or to the response of the introspection endpoint for additional token validation. Not set by default.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">disableTlsHostnameVerification</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable TLS hostname verification. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableECDSA</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>enableECDSA</code> property has been deprecated.</strong> Enable or disable ECDSA support by installing BouncyCastle crypto provider. ECDSA support is always enabled. The BouncyCastle libraries are no longer packaged with Strimzi. Value is ignored.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableMetrics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable OAuth metrics. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableOauthBearer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable OAuth authentication over SASL_OAUTHBEARER. Default value is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enablePlain</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable OAuth authentication over SASL_PLAIN. There is no re-authentication support when this mechanism is used. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">failFast</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable termination of Kafka broker processes due to potentially recoverable runtime errors during startup. Default value is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">fallbackUserNameClaim</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The fallback username claim to be used for the user id if the claim specified by <code>userNameClaim</code> is not present. This is useful when <code>client_credentials</code> authentication only results in the client id being provided in another claim. It only takes effect if <code>userNameClaim</code> is set.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">fallbackUserNamePrefix</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The prefix to use with the value of <code>fallbackUserNameClaim</code> to construct the user id. This only takes effect if <code>fallbackUserNameClaim</code> is true, and the value is present for the claim. Mapping usernames and client ids into the same user id space is useful in preventing name collisions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupsClaim</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JsonPath query used to extract groups for the user during authentication. Extracted groups can be used by a custom authorizer. By default no groups are extracted.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupsClaimDelimiter</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A delimiter used to parse groups when they are extracted as a single String value rather than a JSON array. Default value is ',' (comma).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">httpRetries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of retries to attempt if an initial HTTP request fails. If not set, the default is to not attempt any retries.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">httpRetryPauseMs</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The pause to take before retrying a failed HTTP request. If not set, the default is to not pause at all but to immediately repeat a request.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">includeAcceptHeader</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether the Accept header should be set in requests to the authorization servers. The default value is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">introspectionEndpointUri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URI of the token introspection endpoint which can be used to validate opaque non-JWT tokens.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jwksEndpointUri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URI of the JWKS certificate endpoint, which can be used for local JWT validation.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jwksExpirySeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures how often are the JWKS certificates considered valid. The expiry interval has to be at least 60 seconds longer then the refresh interval specified in <code>jwksRefreshSeconds</code>. Defaults to 360 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jwksIgnoreKeyUse</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Flag to ignore the 'use' attribute of <code>key</code> declarations in a JWKS endpoint response. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jwksMinRefreshPauseSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The minimum pause between two consecutive refreshes. When an unknown signing key is encountered the refresh is scheduled immediately, but will always wait for this minimum pause. Defaults to 1 second.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jwksRefreshSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures how often are the JWKS certificates refreshed. The refresh interval has to be at least 60 seconds shorter then the expiry interval specified in <code>jwksExpirySeconds</code>. Defaults to 300 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maxSecondsWithoutReauthentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Maximum number of seconds the authenticated session remains valid without re-authentication. This enables Apache Kafka re-authentication feature, and causes sessions to expire when the access token expires. If the access token expires before max time or if max time is reached, the client has to re-authenticate, otherwise the server will drop the connection. Not set by default - the authenticated session does not expire when the access token expires. This option only applies to SASL_OAUTHBEARER authentication mechanism (when <code>enableOauthBearer</code> is <code>true</code>).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The read timeout in seconds when connecting to authorization server. If not set, the effective read timeout is 60 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsTrustedCertificates</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertSecretSource-reference"><code>CertSecretSource</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Trusted certificates for TLS connection to the OAuth server.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tokenEndpointUri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URI of the Token Endpoint to use with SASL_PLAIN mechanism when the client authenticates with <code>clientId</code> and a <code>secret</code>. If set, the client can authenticate over SASL_PLAIN by either setting <code>username</code> to <code>clientId</code>, and setting <code>password</code> to client <code>secret</code>, or by setting <code>username</code> to account username, and <code>password</code> to access token prefixed with <code>$accessToken:</code>. If this option is not set, the <code>password</code> is always interpreted as an access token (without a prefix), and <code>username</code> as the account username (a so called 'no-client-credentials' mode).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>oauth</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">userInfoEndpointUri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URI of the User Info Endpoint to use as a fallback to obtaining the user id when the Introspection Endpoint does not return information that can be used for the user id.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">userNameClaim</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name of the claim from the JWT authentication token, Introspection Endpoint response or User Info Endpoint response which will be used to extract the user id. Defaults to <code>sub</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">validIssuerUri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URI of the token issuer used for authentication.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">validTokenType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Valid value for the <code>token_type</code> attribute returned by the Introspection Endpoint. No default value, and not checked by default.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-GenericSecretSource-reference"><a class="link" href="#type-GenericSecretSource-reference">10. <code>GenericSecretSource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a>, <a href="#type-KafkaListenerAuthenticationCustom-reference"><code>KafkaListenerAuthenticationCustom</code></a>, <a href="#type-KafkaListenerAuthenticationOAuth-reference"><code>KafkaListenerAuthenticationOAuth</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">key</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The key under which the secret value is stored in the Kubernetes Secret.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secretName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the Kubernetes Secret containing the secret value.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-CertSecretSource-reference"><a class="link" href="#type-CertSecretSource-reference">11. <code>CertSecretSource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ClientTls-reference"><code>ClientTls</code></a>, <a href="#type-KafkaAuthorizationKeycloak-reference"><code>KafkaAuthorizationKeycloak</code></a>, <a href="#type-KafkaAuthorizationOpa-reference"><code>KafkaAuthorizationOpa</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a>, <a href="#type-KafkaListenerAuthenticationOAuth-reference"><code>KafkaListenerAuthenticationOAuth</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">certificate</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the file certificate in the Secret.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secretName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the Secret containing the certificate.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaListenerAuthenticationCustom-reference"><a class="link" href="#type-KafkaListenerAuthenticationCustom-reference">12. <code>KafkaListenerAuthenticationCustom</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListener-reference"><code>GenericKafkaListener</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaListenerAuthenticationCustom-schema-reference">Full list of <code>KafkaListenerAuthenticationCustom</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To configure custom authentication, set the <code>type</code> property to <code>custom</code>.</p>
</div>
<div class="paragraph">
<p>Custom authentication allows for any type of Kafka-supported authentication to be used.</p>
</div>
<div class="listingblock">
<div class="title">Example custom OAuth authentication configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">spec:
  kafka:
    config:
      principal.builder.class: SimplePrincipal.class
    listeners:
      - name: oauth-bespoke
        port: 9093
        type: internal
        tls: true
        authentication:
          type: custom
          sasl: true
          listenerConfig:
            oauthbearer.sasl.client.callback.handler.class: client.class
            oauthbearer.sasl.server.callback.handler.class: server.class
            oauthbearer.sasl.login.callback.handler.class: login.class
            oauthbearer.connections.max.reauth.ms: 999999999
            sasl.enabled.mechanisms: oauthbearer
            oauthbearer.sasl.jaas.config: |
              org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required ;
          secrets:
            - name: example</code></pre>
</div>
</div>
<div class="paragraph">
<p>A protocol map is generated that uses the <code>sasl</code> and <code>tls</code> values to determine which protocol to map to the listener.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>SASL = True, TLS = True &#8594; SASL_SSL</p>
</li>
<li>
<p>SASL = False, TLS = True &#8594; SSL</p>
</li>
<li>
<p>SASL = True, TLS = False &#8594; SASL_PLAINTEXT</p>
</li>
<li>
<p>SASL = False, TLS = False &#8594; PLAINTEXT</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="listenerconfig"><a class="link" href="#listenerconfig">12.1. <code>listenerConfig</code></a></h3>
<div class="paragraph">
<p>Listener configuration specified using <code>listenerConfig</code> is prefixed with <code>listener.name.<em>&lt;listener_name&gt;-&lt;port&gt;</em></code>.
For example, <code>sasl.enabled.mechanisms</code> becomes <code>listener.name.<em>&lt;listener_name&gt;-&lt;port&gt;</em>.sasl.enabled.mechanisms</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="secrets"><a class="link" href="#secrets">12.2. <code>secrets</code></a></h3>
<div class="paragraph">
<p>Secrets are mounted to <code>/opt/kafka/custom-authn-secrets/custom-listener-<em>&lt;listener_name&gt;-&lt;port&gt;</em>/<em>&lt;secret_name&gt;</em></code> in the Kafka broker nodes' containers.</p>
</div>
<div class="paragraph">
<p>For example, the mounted secret (<code>example</code>) in the example configuration would be located at <code>/opt/kafka/custom-authn-secrets/custom-listener-oauth-bespoke-9093/example</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="principal_builder"><a class="link" href="#principal_builder">12.3. Principal builder</a></h3>
<div class="paragraph">
<p>You can set a custom principal builder in the Kafka cluster configuration.
However, the principal builder is subject to the following requirements:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The specified principal builder class must exist on the image.
<em>Before</em> building your own, check if one already exists.
You&#8217;ll need to rebuild the Strimzi images with the required classes.</p>
</li>
<li>
<p>No other listener is using <code>oauth</code> type authentication.
This is because an OAuth listener appends its own principle builder to the Kafka configuration.</p>
</li>
<li>
<p>The specified principal builder is compatible with Strimzi.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Custom principal builders must support peer certificates for authentication, as Strimzi uses these to manage the Kafka cluster.</p>
</div>
<div class="paragraph">
<p>A custom OAuth principal builder might be identical or very similar to the Strimzi <a href="https://github.com/strimzi/strimzi-kafka-oauth/blob/main/oauth-server/src/main/java/io/strimzi/kafka/oauth/server/OAuthKafkaPrincipalBuilder.java">OAuth principal builder</a>.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<a href="https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/security/authenticator/DefaultKafkaPrincipalBuilder.java#L73-L79">Kafka&#8217;s default principal builder class</a> supports the building of principals based on the names of peer certificates.
The custom principal builder should provide a principal of type <code>user</code> using the name of the SSL peer certificate.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The following example shows a custom principal builder that satisfies the OAuth requirements of Strimzi.</p>
</div>
<div class="listingblock">
<div class="title">Example principal builder for custom OAuth configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">public final class CustomKafkaPrincipalBuilder implements KafkaPrincipalBuilder {

    public KafkaPrincipalBuilder() {}

    @Override
    public KafkaPrincipal build(AuthenticationContext context) {
        if (context instanceof SslAuthenticationContext) {
            SSLSession sslSession = ((SslAuthenticationContext) context).session();
            try {
                return new KafkaPrincipal(
                    KafkaPrincipal.USER_TYPE, sslSession.getPeerPrincipal().getName());
            } catch (SSLPeerUnverifiedException e) {
                throw new IllegalArgumentException("Cannot use an unverified peer for authentication", e);
            }
        }

        // Create your own KafkaPrincipal here
        ...
    }
}</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaListenerAuthenticationCustom-schema-reference"><a class="link" href="#type-KafkaListenerAuthenticationCustom-schema-reference">12.4. <code>KafkaListenerAuthenticationCustom</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaListenerAuthenticationCustom</code> type from <a href="#type-KafkaListenerAuthenticationTls-reference"><code>KafkaListenerAuthenticationTls</code></a>, <a href="#type-KafkaListenerAuthenticationScramSha512-reference"><code>KafkaListenerAuthenticationScramSha512</code></a>, <a href="#type-KafkaListenerAuthenticationOAuth-reference"><code>KafkaListenerAuthenticationOAuth</code></a>.
It must have the value <code>custom</code> for the type <code>KafkaListenerAuthenticationCustom</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">listenerConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration to be used for a specific listener. All values are prefixed with listener.name.<em>&lt;listener_name&gt;</em>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sasl</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable SASL on this listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secrets</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericSecretSource-reference"><code>GenericSecretSource</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Secrets to be mounted to /opt/kafka/custom-authn-secrets/custom-listener-<em>&lt;listener_name&gt;-&lt;port&gt;</em>/<em>&lt;secret_name&gt;</em>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>custom</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-GenericKafkaListenerConfiguration-reference"><a class="link" href="#type-GenericKafkaListenerConfiguration-reference">13. <code>GenericKafkaListenerConfiguration</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListener-reference"><code>GenericKafkaListener</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-GenericKafkaListenerConfiguration-schema-reference">Full list of <code>GenericKafkaListenerConfiguration</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configuration for Kafka listeners.</p>
</div>
<div class="sect2">
<h3 id="property-listener-config-brokerCertChainAndKey-reference"><a class="link" href="#property-listener-config-brokerCertChainAndKey-reference">13.1. <code>brokerCertChainAndKey</code></a></h3>
<div class="paragraph">
<p>The <code>brokerCertChainAndKey</code> property is only used with listeners that have TLS encryption enabled.
You can use the property to provide your own Kafka listener certificates.</p>
</div>
<div class="listingblock">
<div class="title">Example configuration for a <code>loadbalancer</code> external listener with TLS encryption enabled</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: external3
    port: 9094
    type: loadbalancer
    tls: true
    authentication:
      type: tls
    configuration:
      brokerCertChainAndKey:
        secretName: my-secret
        certificate: my-listener-certificate.crt
        key: my-listener-key.key
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>When the certificate or key in the <code>brokerCertChainAndKey</code> secret is updated, the operator will automatically detect it in the next reconciliation and trigger a rolling update of the Kafka brokers to reload the certificate.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-traffic-policy-reference"><a class="link" href="#property-listener-config-traffic-policy-reference">13.2. <code>externalTrafficPolicy</code></a></h3>
<div class="paragraph">
<p>The <code>externalTrafficPolicy</code> property is used with <code>loadbalancer</code> and <code>nodeport</code> listeners.
When exposing Kafka outside of Kubernetes you can choose <code>Local</code> or <code>Cluster</code>.
<code>Local</code> avoids hops to other nodes and preserves the client IP, whereas <code>Cluster</code> does neither.
The default is <code>Cluster</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-source-ranges-reference"><a class="link" href="#property-listener-config-source-ranges-reference">13.3. <code>loadBalancerSourceRanges</code></a></h3>
<div class="paragraph">
<p>The <code>loadBalancerSourceRanges</code> property is only used with <code>loadbalancer</code> listeners.
When exposing Kafka outside of Kubernetes use source ranges, in addition to labels and annotations, to customize how a service is created.</p>
</div>
<div class="listingblock">
<div class="title">Example source ranges configured for a loadbalancer listener</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: external3
    port: 9094
    type: loadbalancer
    tls: false
    configuration:
      externalTrafficPolicy: Local
      loadBalancerSourceRanges:
        - 10.0.0.0/8
        - 88.208.76.87/32
      # ...
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-class-reference"><a class="link" href="#property-listener-config-class-reference">13.4. <code>class</code></a></h3>
<div class="paragraph">
<p>The <code>class</code> property is only used with <code>ingress</code> listeners.
You can configure the <code>Ingress</code> class using the <code>class</code> property.</p>
</div>
<div class="listingblock">
<div class="title">Example of an external listener of type <code>ingress</code> using <code>Ingress</code> class <code>nginx-internal</code></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: external2
    port: 9094
    type: ingress
    tls: true
    configuration:
      class: nginx-internal
    # ...
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-preferredNodePortAddressType-reference"><a class="link" href="#property-listener-config-preferredNodePortAddressType-reference">13.5. <code>preferredNodePortAddressType</code></a></h3>
<div class="paragraph">
<p>The <code>preferredNodePortAddressType</code> property is only used with <code>nodeport</code> listeners.</p>
</div>
<div class="paragraph">
<p>Use the <code>preferredNodePortAddressType</code> property in your listener configuration to specify the first address type checked as the node address.
This property is useful, for example, if your deployment does not have DNS support, or you only want to expose a broker internally through an internal DNS or IP address.
If an address of this type is found, it is used.
If the preferred address type is not found, Strimzi proceeds through the types in the standard order of priority:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>ExternalDNS</p>
</li>
<li>
<p>ExternalIP</p>
</li>
<li>
<p>Hostname</p>
</li>
<li>
<p>InternalDNS</p>
</li>
<li>
<p>InternalIP</p>
</li>
</ol>
</div>
<div class="listingblock">
<div class="title">Example of an external listener configured with a preferred node port address type</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: external4
    port: 9094
    type: nodeport
    tls: false
    configuration:
      preferredNodePortAddressType: InternalDNS
      # ...
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-dns-reference"><a class="link" href="#property-listener-config-dns-reference">13.6. <code>useServiceDnsDomain</code></a></h3>
<div class="paragraph">
<p>The <code>useServiceDnsDomain</code> property is only used with <code>internal</code> and <code>cluster-ip</code> listeners.
It defines whether the fully-qualified DNS names that include the cluster service suffix (usually <code>.cluster.local</code>) are used.
With <code>useServiceDnsDomain</code> set as <code>false</code>, the advertised addresses are generated without the service suffix; for example, <code>my-cluster-kafka-0.my-cluster-kafka-brokers.myproject.svc</code>.
With <code>useServiceDnsDomain</code> set as <code>true</code>, the advertised addresses are generated with the service suffix; for example, <code>my-cluster-kafka-0.my-cluster-kafka-brokers.myproject.svc.cluster.local</code>.
Default is <code>false</code>.</p>
</div>
<div class="listingblock">
<div class="title">Example of an internal listener configured to use the Service DNS domain</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: plain
    port: 9092
    type: internal
    tls: false
    configuration:
      useServiceDnsDomain: true
      # ...
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>If your Kubernetes cluster uses a different service suffix than <code>.cluster.local</code>, you can configure the suffix using the <code>KUBERNETES_SERVICE_DNS_DOMAIN</code> environment variable in the Cluster Operator configuration.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-GenericKafkaListenerConfiguration-schema-reference"><a class="link" href="#type-GenericKafkaListenerConfiguration-schema-reference">13.7. <code>GenericKafkaListenerConfiguration</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">brokerCertChainAndKey</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertAndKeySecretSource-reference"><code>CertAndKeySecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to the <code>Secret</code> which holds the certificate and private key pair which will be used for this listener. The certificate can optionally contain the whole chain. This field can be used only with listeners with enabled TLS encryption.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">externalTrafficPolicy</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [Local, Cluster])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies whether the service routes external traffic to node-local or cluster-wide endpoints. <code>Cluster</code> may cause a second hop to another node and obscures the client source IP. <code>Local</code> avoids a second hop for LoadBalancer and Nodeport type services and preserves the client source IP (when supported by the infrastructure). If unspecified, Kubernetes will use <code>Cluster</code> as the default.This field can be used only with <code>loadbalancer</code> or <code>nodeport</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">loadBalancerSourceRanges</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of CIDR ranges (for example <code>10.0.0.0/8</code> or <code>130.211.204.1/32</code>) from which clients can connect to load balancer type listeners. If supported by the platform, traffic through the loadbalancer is restricted to the specified CIDR ranges. This field is applicable only for loadbalancer type services and is ignored if the cloud provider does not support the feature. This field can be used only with <code>loadbalancer</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericKafkaListenerConfigurationBootstrap-reference"><code>GenericKafkaListenerConfigurationBootstrap</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Bootstrap configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">brokers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericKafkaListenerConfigurationBroker-reference"><code>GenericKafkaListenerConfigurationBroker</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Per-broker configurations.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ipFamilyPolicy</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [RequireDualStack, SingleStack, PreferDualStack])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies the IP Family Policy used by the service. Available options are <code>SingleStack</code>, <code>PreferDualStack</code> and <code>RequireDualStack</code>. <code>SingleStack</code> is for a single IP family. <code>PreferDualStack</code> is for two IP families on dual-stack configured clusters or a single IP family on single-stack clusters. <code>RequireDualStack</code> fails unless there are two IP families on dual-stack configured clusters. If unspecified, Kubernetes will choose the default value based on the service type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ipFamilies</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one or more of [IPv6, IPv4]) array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies the IP Families used by the service. Available options are <code>IPv4</code> and <code>IPv6</code>. If unspecified, Kubernetes will choose the default value based on the <code>ipFamilyPolicy</code> setting.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">createBootstrapService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether to create the bootstrap service or not. The bootstrap service is created by default (if not specified differently). This field can be used with the <code>loadBalancer</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">class</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures a specific class for <code>Ingress</code> and <code>LoadBalancer</code> that defines which controller will be used. This field can only be used with <code>ingress</code> and <code>loadbalancer</code> type listeners. If not specified, the default controller is used. For an <code>ingress</code> listener, set the <code>ingressClassName</code> property in the <code>Ingress</code> resources. For a <code>loadbalancer</code> listener, set the <code>loadBalancerClass</code> property  in the <code>Service</code> resources.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">finalizers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of finalizers which will be configured for the <code>LoadBalancer</code> type Services created for this listener. If supported by the platform, the finalizer <code>service.kubernetes.io/load-balancer-cleanup</code> to make sure that the external load balancer is deleted together with the service.For more information, see <a href="https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#garbage-collecting-load-balancers" class="bare">https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#garbage-collecting-load-balancers</a>. This field can be used only with <code>loadbalancer</code> type listeners.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maxConnectionCreationRate</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum connection creation rate we allow in this listener at any time. New connections will be throttled if the limit is reached.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maxConnections</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of connections we allow for this listener in the broker at any time. New connections are blocked if the limit is reached.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">preferredNodePortAddressType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [ExternalDNS, ExternalIP, Hostname, InternalIP, InternalDNS])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Defines which address type should be used as the node address. Available types are: <code>ExternalDNS</code>, <code>ExternalIP</code>, <code>InternalDNS</code>, <code>InternalIP</code> and <code>Hostname</code>. By default, the addresses will be used in the following order (the first one found will be used):</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>ExternalDNS</code></p>
</li>
<li>
<p><code>ExternalIP</code></p>
</li>
<li>
<p><code>InternalDNS</code></p>
</li>
<li>
<p><code>InternalIP</code></p>
</li>
<li>
<p><code>Hostname</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>This field is used to select the preferred address type, which is checked first. If no address is found for this address type, the other types are checked in the default order. This field can only be used with <code>nodeport</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">useServiceDnsDomain</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures whether the Kubernetes service DNS domain should be used or not. If set to <code>true</code>, the generated addresses will contain the service DNS domain suffix (by default <code>.cluster.local</code>, can be configured using environment variable <code>KUBERNETES_SERVICE_DNS_DOMAIN</code>). Defaults to <code>false</code>.This field can be used only with <code>internal</code> and <code>cluster-ip</code> type listeners.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-CertAndKeySecretSource-reference"><a class="link" href="#type-CertAndKeySecretSource-reference">14. <code>CertAndKeySecretSource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListenerConfiguration-reference"><code>GenericKafkaListenerConfiguration</code></a>, <a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">certificate</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the file certificate in the Secret.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">key</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the private key in the Secret.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secretName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the Secret containing the certificate.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-GenericKafkaListenerConfigurationBootstrap-reference"><a class="link" href="#type-GenericKafkaListenerConfigurationBootstrap-reference">15. <code>GenericKafkaListenerConfigurationBootstrap</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListenerConfiguration-reference"><code>GenericKafkaListenerConfiguration</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-GenericKafkaListenerConfigurationBootstrap-schema-reference">Full list of <code>GenericKafkaListenerConfigurationBootstrap</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Broker service equivalents of <code>nodePort</code>, <code>host</code>, <code>loadBalancerIP</code> and <code>annotations</code> properties are configured in the <a href="#type-GenericKafkaListenerConfigurationBroker-reference"><code>GenericKafkaListenerConfigurationBroker</code> schema</a>.</p>
</div>
<div class="sect2">
<h3 id="property-listener-config-altnames-reference"><a class="link" href="#property-listener-config-altnames-reference">15.1. <code>alternativeNames</code></a></h3>
<div class="paragraph">
<p>You can specify alternative names for the bootstrap service.
The names are added to the broker certificates and can be used for TLS hostname verification.
The <code>alternativeNames</code> property is applicable to all types of listeners.</p>
</div>
<div class="listingblock">
<div class="title">Example of an external <code>route</code> listener configured with an additional bootstrap address</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: external1
    port: 9094
    type: route
    tls: true
    authentication:
      type: tls
    configuration:
      bootstrap:
        alternativeNames:
          - example.hostname1
          - example.hostname2
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-host-reference"><a class="link" href="#property-listener-config-host-reference">15.2. <code>host</code></a></h3>
<div class="paragraph">
<p>The <code>host</code> property is used with <code>route</code> and <code>ingress</code> listeners to specify the hostnames used by the bootstrap and per-broker services.</p>
</div>
<div class="paragraph">
<p>A <code>host</code> property value is mandatory for <code>ingress</code> listener configuration, as the Ingress controller does not assign any hostnames automatically.
Make sure that the hostnames resolve to the Ingress endpoints.
Strimzi will not perform any validation that the requested hosts are available and properly routed to the Ingress endpoints.</p>
</div>
<div class="listingblock">
<div class="title">Example of host configuration for an ingress listener</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: external2
    port: 9094
    type: ingress
    tls: true
    authentication:
      type: tls
    configuration:
      bootstrap:
        host: bootstrap.myingress.com
      brokers:
      - broker: 0
        host: broker-0.myingress.com
      - broker: 1
        host: broker-1.myingress.com
      - broker: 2
        host: broker-2.myingress.com
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>By default, <code>route</code> listener hosts are automatically assigned by OpenShift.
However, you can override the assigned route hosts by specifying hosts.</p>
</div>
<div class="paragraph">
<p>Strimzi does not perform any validation that the requested hosts are available.
You must ensure that they are free and can be used.</p>
</div>
<div class="listingblock">
<div class="title">Example of host configuration for a route listener</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
listeners:
  #...
  - name: external1
    port: 9094
    type: route
    tls: true
    authentication:
      type: tls
    configuration:
      bootstrap:
        host: bootstrap.myrouter.com
      brokers:
      - broker: 0
        host: broker-0.myrouter.com
      - broker: 1
        host: broker-1.myrouter.com
      - broker: 2
        host: broker-2.myrouter.com
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-nodeport-reference"><a class="link" href="#property-listener-config-nodeport-reference">15.3. <code>nodePort</code></a></h3>
<div class="paragraph">
<p>By default, the port numbers used for the bootstrap and broker services are automatically assigned by Kubernetes.
You can override the assigned node ports for <code>nodeport</code> listeners by specifying the requested port numbers.</p>
</div>
<div class="paragraph">
<p>Strimzi does not perform any validation on the requested ports.
You must ensure that they are free and available for use.</p>
</div>
<div class="listingblock">
<div class="title">Example of an external listener configured with overrides for node ports</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
listeners:
  #...
  - name: external4
    port: 9094
    type: nodeport
    tls: true
    authentication:
      type: tls
    configuration:
      bootstrap:
        nodePort: 32100
      brokers:
      - broker: 0
        nodePort: 32000
      - broker: 1
        nodePort: 32001
      - broker: 2
        nodePort: 32002
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-lb-ip-reference"><a class="link" href="#property-listener-config-lb-ip-reference">15.4. <code>loadBalancerIP</code></a></h3>
<div class="paragraph">
<p>Use the <code>loadBalancerIP</code> property to request a specific IP address when creating a loadbalancer.
Use this property when you need to use a loadbalancer with a specific IP address.
The <code>loadBalancerIP</code> field is ignored if the cloud provider does not support the feature.</p>
</div>
<div class="listingblock">
<div class="title">Example of an external listener of type <code>loadbalancer</code> with specific loadbalancer IP address requests</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
listeners:
  #...
  - name: external3
    port: 9094
    type: loadbalancer
    tls: true
    authentication:
      type: tls
    configuration:
      bootstrap:
        loadBalancerIP: 172.29.3.10
      brokers:
      - broker: 0
        loadBalancerIP: 172.29.3.1
      - broker: 1
        loadBalancerIP: 172.29.3.2
      - broker: 2
        loadBalancerIP: 172.29.3.3
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-listener-config-annotations-reference"><a class="link" href="#property-listener-config-annotations-reference">15.5. <code>annotations</code></a></h3>
<div class="paragraph">
<p>Use the <code>annotations</code> property to add annotations to Kubernetes resources related to the listeners.
You can use these annotations, for example, to instrument DNS tooling such as <a href="https://github.com/kubernetes-incubator/external-dns" target="_blank" rel="noopener">External DNS</a>, which automatically assigns DNS names to the loadbalancer services.</p>
</div>
<div class="listingblock">
<div class="title">Example of an external listener of type <code>loadbalancer</code> using <code>annotations</code></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
listeners:
  #...
  - name: external3
    port: 9094
    type: loadbalancer
    tls: true
    authentication:
      type: tls
    configuration:
      bootstrap:
        annotations:
          external-dns.alpha.kubernetes.io/hostname: kafka-bootstrap.mydomain.com.
          external-dns.alpha.kubernetes.io/ttl: "60"
      brokers:
      - broker: 0
        annotations:
          external-dns.alpha.kubernetes.io/hostname: kafka-broker-0.mydomain.com.
          external-dns.alpha.kubernetes.io/ttl: "60"
      - broker: 1
        annotations:
          external-dns.alpha.kubernetes.io/hostname: kafka-broker-1.mydomain.com.
          external-dns.alpha.kubernetes.io/ttl: "60"
      - broker: 2
        annotations:
          external-dns.alpha.kubernetes.io/hostname: kafka-broker-2.mydomain.com.
          external-dns.alpha.kubernetes.io/ttl: "60"
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-GenericKafkaListenerConfigurationBootstrap-schema-reference"><a class="link" href="#type-GenericKafkaListenerConfigurationBootstrap-schema-reference">15.6. <code>GenericKafkaListenerConfigurationBootstrap</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">alternativeNames</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Additional alternative names for the bootstrap service. The alternative names will be added to the list of subject alternative names of the TLS certificates.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The bootstrap host. This field will be used in the Ingress resource or in the Route resource to specify the desired hostname. This field can be used only with <code>route</code> (optional) or <code>ingress</code> (required) type listeners.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">nodePort</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Node port for the bootstrap service. This field can be used only with <code>nodeport</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">loadBalancerIP</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The loadbalancer is requested with the IP address specified in this field. This feature depends on whether the underlying cloud provider supports specifying the <code>loadBalancerIP</code> when a load balancer is created. This field is ignored if the cloud provider does not support the feature.This field can be used only with <code>loadbalancer</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">annotations</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Annotations that will be added to the <code>Ingress</code>, <code>Route</code>, or <code>Service</code> resource. You can use this field to configure DNS providers such as External DNS. This field can be used only with <code>loadbalancer</code>, <code>nodeport</code>, <code>route</code>, or <code>ingress</code> type listeners.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labels</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Labels that will be added to the <code>Ingress</code>, <code>Route</code>, or <code>Service</code> resource. This field can be used only with <code>loadbalancer</code>, <code>nodeport</code>, <code>route</code>, or <code>ingress</code> type listeners.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-GenericKafkaListenerConfigurationBroker-reference"><a class="link" href="#type-GenericKafkaListenerConfigurationBroker-reference">16. <code>GenericKafkaListenerConfigurationBroker</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-GenericKafkaListenerConfiguration-reference"><code>GenericKafkaListenerConfiguration</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-GenericKafkaListenerConfigurationBroker-schema-reference">Full list of <code>GenericKafkaListenerConfigurationBroker</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>You can see example configuration for the <code>nodePort</code>, <code>host</code>, <code>loadBalancerIP</code> and <code>annotations</code> properties in the <a href="#type-GenericKafkaListenerConfigurationBootstrap-reference"><code>GenericKafkaListenerConfigurationBootstrap</code> schema</a>,
which configures bootstrap service overrides.</p>
</div>
<div id="property-listener-config-broker-reference" class="paragraph">
<div class="title">Advertised addresses for brokers</div>
<p>By default, Strimzi tries to automatically determine the hostnames and ports that your Kafka cluster advertises to its clients.
This is not sufficient in all situations, because the infrastructure on which Strimzi is running might not provide the right hostname or port through which Kafka can be accessed.</p>
</div>
<div class="paragraph">
<p>You can specify a broker ID and customize the advertised hostname and port in the <code>configuration</code> property of the listener.
Strimzi will then automatically configure the advertised address in the Kafka brokers and add it to the broker certificates so it can be used for TLS hostname verification.
Overriding the advertised host and ports is available for all types of listeners.</p>
</div>
<div class="listingblock">
<div class="title">Example of an external <code>route</code> listener configured with overrides for advertised addresses</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">listeners:
  #...
  - name: external1
    port: 9094
    type: route
    tls: true
    authentication:
      type: tls
    configuration:
      brokers:
      - broker: 0
        advertisedHost: example.hostname.0
        advertisedPort: 12340
      - broker: 1
        advertisedHost: example.hostname.1
        advertisedPort: 12341
      - broker: 2
        advertisedHost: example.hostname.2
        advertisedPort: 12342
# ...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="type-GenericKafkaListenerConfigurationBroker-schema-reference"><a class="link" href="#type-GenericKafkaListenerConfigurationBroker-schema-reference">16.1. <code>GenericKafkaListenerConfigurationBroker</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">broker</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>ID of the kafka broker (broker identifier). Broker IDs start from 0 and correspond to the number of broker replicas.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">advertisedHost</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The host name used in the brokers' <code>advertised.listeners</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">advertisedPort</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The port number used in the brokers' <code>advertised.listeners</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The broker host. This field will be used in the Ingress resource or in the Route resource to specify the desired hostname. This field can be used only with <code>route</code> (optional) or <code>ingress</code> (required) type listeners.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">nodePort</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Node port for the per-broker service. This field can be used only with <code>nodeport</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">loadBalancerIP</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The loadbalancer is requested with the IP address specified in this field. This feature depends on whether the underlying cloud provider supports specifying the <code>loadBalancerIP</code> when a load balancer is created. This field is ignored if the cloud provider does not support the feature.This field can be used only with <code>loadbalancer</code> type listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">annotations</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Annotations that will be added to the <code>Ingress</code> or <code>Service</code> resource. You can use this field to configure DNS providers such as External DNS. This field can be used only with <code>loadbalancer</code>, <code>nodeport</code>, or <code>ingress</code> type listeners.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labels</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Labels that will be added to the <code>Ingress</code>, <code>Route</code>, or <code>Service</code> resource. This field can be used only with <code>loadbalancer</code>, <code>nodeport</code>, <code>route</code>, or <code>ingress</code> type listeners.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-EphemeralStorage-reference"><a class="link" href="#type-EphemeralStorage-reference">17. <code>EphemeralStorage</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-JbodStorage-reference"><code>JbodStorage</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaNodePoolSpec-reference"><code>KafkaNodePoolSpec</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>EphemeralStorage</code> type from <a href="#type-PersistentClaimStorage-reference"><code>PersistentClaimStorage</code></a>.
It must have the value <code>ephemeral</code> for the type <code>EphemeralStorage</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">id</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Storage identification number. It is mandatory only for storage volumes defined in a storage of type 'jbod'.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sizeLimit</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>When type=ephemeral, defines the total amount of local storage required for this EmptyDir volume (for example 1Gi).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>ephemeral</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-PersistentClaimStorage-reference"><a class="link" href="#type-PersistentClaimStorage-reference">18. <code>PersistentClaimStorage</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-JbodStorage-reference"><code>JbodStorage</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaNodePoolSpec-reference"><code>KafkaNodePoolSpec</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>PersistentClaimStorage</code> type from <a href="#type-EphemeralStorage-reference"><code>EphemeralStorage</code></a>.
It must have the value <code>persistent-claim</code> for the type <code>PersistentClaimStorage</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>persistent-claim</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">size</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>When <code>type=persistent-claim</code>, defines the size of the persistent volume claim, such as 100Gi. Mandatory when <code>type=persistent-claim</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">selector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies a specific persistent volume to use. It contains key:value pairs representing labels for selecting such a volume.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deleteClaim</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies if the persistent volume claim has to be deleted when the cluster is un-deployed.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">class</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The storage class to use for dynamic volume allocation.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">id</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Storage identification number. It is mandatory only for storage volumes defined in a storage of type 'jbod'.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">overrides</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PersistentClaimStorageOverride-reference"><code>PersistentClaimStorageOverride</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Overrides for individual brokers. The <code>overrides</code> field allows to specify a different configuration for different brokers.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-PersistentClaimStorageOverride-reference"><a class="link" href="#type-PersistentClaimStorageOverride-reference">19. <code>PersistentClaimStorageOverride</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-PersistentClaimStorage-reference"><code>PersistentClaimStorage</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">class</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The storage class to use for dynamic volume allocation for this broker.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">broker</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Id of the kafka broker (broker identifier).</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JbodStorage-reference"><a class="link" href="#type-JbodStorage-reference">20. <code>JbodStorage</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaNodePoolSpec-reference"><code>KafkaNodePoolSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>JbodStorage</code> type from <a href="#type-EphemeralStorage-reference"><code>EphemeralStorage</code></a>, <a href="#type-PersistentClaimStorage-reference"><code>PersistentClaimStorage</code></a>.
It must have the value <code>jbod</code> for the type <code>JbodStorage</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>jbod</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">volumes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EphemeralStorage-reference"><code>EphemeralStorage</code></a>, <a href="#type-PersistentClaimStorage-reference"><code>PersistentClaimStorage</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of volumes as Storage objects representing the JBOD disks array.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaAuthorizationSimple-reference"><a class="link" href="#type-KafkaAuthorizationSimple-reference">21. <code>KafkaAuthorizationSimple</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaAuthorizationSimple-schema-reference">Full list of <code>KafkaAuthorizationSimple</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>For simple authorization, Strimzi uses Kafka&#8217;s built-in authorization plugins: the <code>StandardAuthorizer</code> for KRaft mode and the <code>AclAuthorizer</code> for ZooKeeper-based cluster management.
ACLs allow you to define which users have access to which resources at a granular level.</p>
</div>
<div class="paragraph">
<p>Configure the <code>Kafka</code> custom resource to use simple authorization.
Set the <code>type</code> property in the <code>authorization</code> section to the value <code>simple</code>,
and configure a list of super users.</p>
</div>
<div class="paragraph">
<p>Access rules are configured for the <code>KafkaUser</code>, as described in the <a href="#type-AclRule-reference">ACLRule schema reference</a>.</p>
</div>
<div class="sect2">
<h3 id="property-simple-authorization-superusers-reference"><a class="link" href="#property-simple-authorization-superusers-reference">21.1. <code>superUsers</code></a></h3>
<div class="paragraph">
<p>A list of user principals treated as super users, so that they are always allowed without querying ACL rules.</p>
</div>
<div class="listingblock">
<div class="title">An example of simple authorization configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: myproject
spec:
  kafka:
    # ...
    authorization:
      type: simple
      superUsers:
        - CN=client_1
        - user_2
        - CN=client_3
    # ...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The <code>super.user</code> configuration option in the <code>config</code> property in <code>Kafka.spec.kafka</code> is ignored.
Designate super users in the <code>authorization</code> property instead.
For more information, see <a href="#type-KafkaClusterSpec-reference">Kafka broker configuration</a>.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaAuthorizationSimple-schema-reference"><a class="link" href="#type-KafkaAuthorizationSimple-schema-reference">21.2. <code>KafkaAuthorizationSimple</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaAuthorizationSimple</code> type from <a href="#type-KafkaAuthorizationOpa-reference"><code>KafkaAuthorizationOpa</code></a>, <a href="#type-KafkaAuthorizationKeycloak-reference"><code>KafkaAuthorizationKeycloak</code></a>, <a href="#type-KafkaAuthorizationCustom-reference"><code>KafkaAuthorizationCustom</code></a>.
It must have the value <code>simple</code> for the type <code>KafkaAuthorizationSimple</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>simple</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">superUsers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of super users. Should contain list of user principals which should get unlimited access rights.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaAuthorizationOpa-reference"><a class="link" href="#type-KafkaAuthorizationOpa-reference">22. <code>KafkaAuthorizationOpa</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaAuthorizationOpa-schema-reference">Full list of <code>KafkaAuthorizationOpa</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To use <a href="https://www.openpolicyagent.org/" target="_blank" rel="noopener">Open Policy Agent</a> authorization, set the <code>type</code> property in the <code>authorization</code> section to the value <code>opa</code>,
and configure OPA properties as required.
Strimzi uses Open Policy Agent plugin for Kafka authorization as the authorizer.
For more information about the format of the input data and policy examples, see <a href="https://github.com/anderseknert/opa-kafka-plugin" target="_blank" rel="noopener">Open Policy Agent plugin for Kafka authorization</a>.</p>
</div>
<div class="sect2">
<h3 id="url"><a class="link" href="#url">22.1. <code>url</code></a></h3>
<div class="paragraph">
<p>The URL used to connect to the Open Policy Agent server.
The URL has to include the policy which will be queried by the authorizer.
<strong>Required.</strong></p>
</div>
</div>
<div class="sect2">
<h3 id="allowonerror"><a class="link" href="#allowonerror">22.2. <code>allowOnError</code></a></h3>
<div class="paragraph">
<p>Defines whether a Kafka client should be allowed or denied by default when the authorizer fails to query the Open Policy Agent, for example, when it is temporarily unavailable.
Defaults to <code>false</code> - all actions will be denied.</p>
</div>
</div>
<div class="sect2">
<h3 id="initialcachecapacity"><a class="link" href="#initialcachecapacity">22.3. <code>initialCacheCapacity</code></a></h3>
<div class="paragraph">
<p>Initial capacity of the local cache used by the authorizer to avoid querying the Open Policy Agent for every request.
Defaults to <code>5000</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="maximumcachesize"><a class="link" href="#maximumcachesize">22.4. <code>maximumCacheSize</code></a></h3>
<div class="paragraph">
<p>Maximum capacity of the local cache used by the authorizer to avoid querying the Open Policy Agent for every request.
Defaults to <code>50000</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="expireafterms"><a class="link" href="#expireafterms">22.5. <code>expireAfterMs</code></a></h3>
<div class="paragraph">
<p>The expiration of the records kept in the local cache to avoid querying the Open Policy Agent for every request.
Defines how often the cached authorization decisions are reloaded from the Open Policy Agent server.
In milliseconds.
Defaults to <code>3600000</code> milliseconds (1 hour).</p>
</div>
</div>
<div class="sect2">
<h3 id="tlstrustedcertificates"><a class="link" href="#tlstrustedcertificates">22.6. <code>tlsTrustedCertificates</code></a></h3>
<div class="paragraph">
<p>Trusted certificates for TLS connection to the OPA server.</p>
</div>
</div>
<div class="sect2">
<h3 id="superusers"><a class="link" href="#superusers">22.7. <code>superUsers</code></a></h3>
<div class="paragraph">
<p>A list of user principals treated as super users, so that they are always allowed without querying the open Policy Agent policy.</p>
</div>
<div class="listingblock">
<div class="title">An example of Open Policy Agent authorizer configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: myproject
spec:
  kafka:
    # ...
    authorization:
      type: opa
      url: http://opa:8181/v1/data/kafka/allow
      allowOnError: false
      initialCacheCapacity: 1000
      maximumCacheSize: 10000
      expireAfterMs: 60000
      superUsers:
        - CN=fred
        - sam
        - CN=edward
    # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaAuthorizationOpa-schema-reference"><a class="link" href="#type-KafkaAuthorizationOpa-schema-reference">22.8. <code>KafkaAuthorizationOpa</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaAuthorizationOpa</code> type from <a href="#type-KafkaAuthorizationSimple-reference"><code>KafkaAuthorizationSimple</code></a>, <a href="#type-KafkaAuthorizationKeycloak-reference"><code>KafkaAuthorizationKeycloak</code></a>, <a href="#type-KafkaAuthorizationCustom-reference"><code>KafkaAuthorizationCustom</code></a>.
It must have the value <code>opa</code> for the type <code>KafkaAuthorizationOpa</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>opa</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The URL used to connect to the Open Policy Agent server. The URL has to include the policy which will be queried by the authorizer. This option is required.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">allowOnError</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Defines whether a Kafka client should be allowed or denied by default when the authorizer fails to query the Open Policy Agent, for example, when it is temporarily unavailable). Defaults to <code>false</code> - all actions will be denied.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">initialCacheCapacity</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Initial capacity of the local cache used by the authorizer to avoid querying the Open Policy Agent for every request Defaults to <code>5000</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maximumCacheSize</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Maximum capacity of the local cache used by the authorizer to avoid querying the Open Policy Agent for every request. Defaults to <code>50000</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">expireAfterMs</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The expiration of the records kept in the local cache to avoid querying the Open Policy Agent for every request. Defines how often the cached authorization decisions are reloaded from the Open Policy Agent server. In milliseconds. Defaults to <code>3600000</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsTrustedCertificates</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertSecretSource-reference"><code>CertSecretSource</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Trusted certificates for TLS connection to the OPA server.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">superUsers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of super users, which is specifically a list of user principals that have unlimited access rights.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableMetrics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Defines whether the Open Policy Agent authorizer plugin should provide metrics. Defaults to <code>false</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaAuthorizationKeycloak-reference"><a class="link" href="#type-KafkaAuthorizationKeycloak-reference">23. <code>KafkaAuthorizationKeycloak</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaAuthorizationKeycloak</code> type from <a href="#type-KafkaAuthorizationSimple-reference"><code>KafkaAuthorizationSimple</code></a>, <a href="#type-KafkaAuthorizationOpa-reference"><code>KafkaAuthorizationOpa</code></a>, <a href="#type-KafkaAuthorizationCustom-reference"><code>KafkaAuthorizationCustom</code></a>.
It must have the value <code>keycloak</code> for the type <code>KafkaAuthorizationKeycloak</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>keycloak</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>OAuth Client ID which the Kafka client can use to authenticate against the OAuth server and use the token endpoint URI.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tokenEndpointUri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authorization server token endpoint URI.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsTrustedCertificates</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertSecretSource-reference"><code>CertSecretSource</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Trusted certificates for TLS connection to the OAuth server.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">disableTlsHostnameVerification</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable TLS hostname verification. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">delegateToKafkaAcls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether authorization decision should be delegated to the 'Simple' authorizer if DENIED by Keycloak Authorization Services policies. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">grantsRefreshPeriodSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The time between two consecutive grants refresh runs in seconds. The default value is 60.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">grantsRefreshPoolSize</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of threads to use to refresh grants for active sessions. The more threads, the more parallelism, so the sooner the job completes. However, using more threads places a heavier load on the authorization server. The default value is 5.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">grantsGcPeriodSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The time, in seconds, between consecutive runs of a job that cleans stale grants from the cache. The default value is 300.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">grantsAlwaysLatest</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Controls whether the latest grants are fetched for a new session. When enabled, grants are retrieved from Keycloak and cached for the user. The default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">superUsers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of super users. Should contain list of user principals which should get unlimited access rights.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The connect timeout in seconds when connecting to authorization server. If not set, the effective connect timeout is 60 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The read timeout in seconds when connecting to authorization server. If not set, the effective read timeout is 60 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">httpRetries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of retries to attempt if an initial HTTP request fails. If not set, the default is to not attempt any retries.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableMetrics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable OAuth metrics. The default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">includeAcceptHeader</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether the Accept header should be set in requests to the authorization servers. The default value is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">grantsMaxIdleTimeSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The time, in seconds, after which an idle grant can be evicted from the cache. The default value is 300.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaAuthorizationCustom-reference"><a class="link" href="#type-KafkaAuthorizationCustom-reference">24. <code>KafkaAuthorizationCustom</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaAuthorizationCustom-schema-reference">Full list of <code>KafkaAuthorizationCustom</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To use custom authorization in Strimzi, you can configure your own <code>Authorizer</code> plugin to define Access Control Lists (ACLs).</p>
</div>
<div class="paragraph">
<p>ACLs allow you to define which users have access to which resources at a granular level.</p>
</div>
<div class="paragraph">
<p>Configure the <code>Kafka</code> custom resource to use custom authorization.
Set the <code>type</code> property in the <code>authorization</code> section to the value <code>custom</code>,
and the set following properties.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
The custom authorizer must implement the <code>org.apache.kafka.server.authorizer.Authorizer</code> interface, and support configuration of <code>super.users</code> using the super.users configuration property.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="property-custom-authorization-authorizerclass-reference"><a class="link" href="#property-custom-authorization-authorizerclass-reference">24.1. <code>authorizerClass</code></a></h3>
<div class="paragraph">
<p>(Required) Java class that implements the <code>org.apache.kafka.server.authorizer.Authorizer</code> interface to support custom ACLs.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-custom-authorization-superusers-reference"><a class="link" href="#property-custom-authorization-superusers-reference">24.2. <code>superUsers</code></a></h3>
<div class="paragraph">
<p>A list of user principals treated as super users, so that they are always allowed without querying ACL rules.</p>
</div>
<div class="paragraph">
<p>You can add configuration for initializing the custom authorizer using <code>Kafka.spec.kafka.config</code>.</p>
</div>
<div class="listingblock">
<div class="title">An example of custom authorization configuration under <code>Kafka.spec</code></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: myproject
spec:
  kafka:
    # ...
    authorization:
      type: custom
      authorizerClass: io.mycompany.CustomAuthorizer
      superUsers:
        - CN=client_1
        - user_2
        - CN=client_3
    # ...
    config:
      authorization.custom.property1=value1
      authorization.custom.property2=value2
    # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>In addition to the <code>Kafka</code> custom resource configuration, the JAR file containing the custom authorizer class along with its dependencies must be available on the classpath of the Kafka broker.</p>
</div>
<div class="paragraph">
<p>The Strimzi Maven build process provides a mechanism to add custom third-party libraries to the generated Kafka broker container image by adding them as dependencies in the <code>pom.xml</code> file under the <code>docker-images/kafka/kafka-thirdparty-libs</code> directory. The directory contains different folders for different Kafka versions. Choose the appropriate folder. Before modifying the <code>pom.xml</code> file, the third-party library must be available in a Maven repository, and that Maven repository must be accessible to the Strimzi build process.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The <code>super.user</code> configuration option in the <code>config</code> property in <code>Kafka.spec.kafka</code> is ignored.
Designate super users in the <code>authorization</code> property instead.
For more information, see <a href="#type-KafkaClusterSpec-reference">Kafka broker configuration</a>.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Custom authorization can make use of group membership information extracted from the JWT token during authentication when using <code>oauth</code> authentication and configuring <code>groupsClaim</code> configuration attribute. Groups are available on the <code>OAuthKafkaPrincipal</code> object during authorize() call as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">    public List&lt;AuthorizationResult&gt; authorize(AuthorizableRequestContext requestContext, List&lt;Action&gt; actions) {

        KafkaPrincipal principal = requestContext.principal();
        if (principal instanceof OAuthKafkaPrincipal) {
            OAuthKafkaPrincipal p = (OAuthKafkaPrincipal) principal;

            for (String group: p.getGroups()) {
                System.out.println("Group: " + group);
            }
        }
    }</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaAuthorizationCustom-schema-reference"><a class="link" href="#type-KafkaAuthorizationCustom-schema-reference">24.3. <code>KafkaAuthorizationCustom</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaAuthorizationCustom</code> type from <a href="#type-KafkaAuthorizationSimple-reference"><code>KafkaAuthorizationSimple</code></a>, <a href="#type-KafkaAuthorizationOpa-reference"><code>KafkaAuthorizationOpa</code></a>, <a href="#type-KafkaAuthorizationKeycloak-reference"><code>KafkaAuthorizationKeycloak</code></a>.
It must have the value <code>custom</code> for the type <code>KafkaAuthorizationCustom</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>custom</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authorizerClass</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authorization implementation class, which must be available in classpath.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">superUsers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of super users, which are user principals with unlimited access rights.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">supportsAdminApi</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Indicates whether the custom authorizer supports the APIs for managing ACLs using the Kafka Admin API. Defaults to <code>false</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-Rack-reference"><a class="link" href="#type-Rack-reference">25. <code>Rack</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-Rack-schema-reference">Full list of <code>Rack</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>The <code>rack</code> option configures rack awareness.
A <em>rack</em> can represent an availability zone, data center, or an actual rack in your data center.
The <em>rack</em> is configured through a <code>topologyKey</code>.
<code>topologyKey</code> identifies a label on Kubernetes nodes that contains the name of the topology in its value.
An example of such a label is <code>topology.kubernetes.io/zone</code> (or <code>failure-domain.beta.kubernetes.io/zone</code> on older Kubernetes versions), which contains the name of the availability zone in which the Kubernetes node runs.
You can configure your Kafka cluster to be aware of the <em>rack</em> in which it runs, and enable additional features such as spreading partition replicas across different racks or consuming messages from the closest replicas.</p>
</div>
<div class="paragraph">
<p>For more information about Kubernetes node labels, see <a href="https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/" target="_blank" rel="noopener">Well-Known Labels, Annotations and Taints</a>.
Consult your Kubernetes administrator regarding the node label that represents the zone or rack into which the node is deployed.</p>
</div>
<div class="sect2">
<h3 id="spreading_partition_replicas_across_racks"><a class="link" href="#spreading_partition_replicas_across_racks">25.1. Spreading partition replicas across racks</a></h3>
<div class="paragraph">
<p>When rack awareness is configured, Strimzi will set <code>broker.rack</code> configuration for each Kafka broker.
The <code>broker.rack</code> configuration assigns a rack ID to each broker.
When <code>broker.rack</code> is configured, Kafka brokers will spread partition replicas across as many different racks as possible.
When replicas are spread across multiple racks, the probability that multiple replicas will fail at the same time is lower than if they would be in the same rack.
Spreading replicas improves resiliency, and is important for availability and reliability.
To enable rack awareness in Kafka, add the <code>rack</code> option to the <code>.spec.kafka</code> section of the <code>Kafka</code> custom resource as shown in the example below.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>rack</code> configuration for Kafka</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    rack:
      topologyKey: topology.kubernetes.io/zone
    # ...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The <em>rack</em> in which brokers are running can change in some cases when the pods are deleted or restarted.
As a result, the replicas running in different racks might then share the same rack.
Use Cruise Control and the <code>KafkaRebalance</code> resource with the <code>RackAwareGoal</code> to make sure that replicas remain distributed across different racks.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>When rack awareness is enabled in the <code>Kafka</code> custom resource, Strimzi will automatically add the Kubernetes <code>preferredDuringSchedulingIgnoredDuringExecution</code> affinity rule to distribute the Kafka brokers across the different racks.
However, the <em>preferred</em> rule does not guarantee that the brokers will be spread.
Depending on your exact Kubernetes and Kafka configurations, you should add additional <code>affinity</code> rules or configure <code>topologySpreadConstraints</code> for both ZooKeeper and Kafka to make sure the nodes are properly distributed accross as many racks as possible.
For more information see <a href="./deploying.html#assembly-scheduling-str" target="_blank" rel="noopener">Configuring pod scheduling</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="consuming_messages_from_the_closest_replicas"><a class="link" href="#consuming_messages_from_the_closest_replicas">25.2. Consuming messages from the closest replicas</a></h3>
<div class="paragraph">
<p>Rack awareness can also be used in consumers to fetch data from the closest replica.
This is useful for reducing the load on your network when a Kafka cluster spans multiple datacenters and can also reduce costs when running Kafka in public clouds.
However, it can lead to increased latency.</p>
</div>
<div class="paragraph">
<p>In order to be able to consume from the closest replica, rack awareness has to be configured in the Kafka cluster, and the <code>RackAwareReplicaSelector</code> has to be enabled.
The replica selector plugin provides the logic that enables clients to consume from the nearest replica.
The default implementation uses <code>LeaderSelector</code> to always select the leader replica for the client.
Specify <code>RackAwareReplicaSelector</code> for the <code>replica.selector.class</code> to switch from the default implementation.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>rack</code> configuration with enabled replica-aware selector</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    rack:
      topologyKey: topology.kubernetes.io/zone
    config:
      # ...
      replica.selector.class: org.apache.kafka.common.replica.RackAwareReplicaSelector
    # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>In addition to the Kafka broker configuration, you also need to specify the <code>client.rack</code> option in your consumers.
The <code>client.rack</code> option should specify the <em>rack ID</em> in which the consumer is running.
<code>RackAwareReplicaSelector</code> associates matching <code>broker.rack</code> and <code>client.rack</code> IDs, to find the nearest replica and consume from it.
If there are multiple replicas in the same rack, <code>RackAwareReplicaSelector</code> always selects the most up-to-date replica.
If the rack ID is not specified, or if it cannot find a replica with the same rack ID, it will fall back to the leader replica.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="images/rack-config-availability-zones.png" alt="consuming from replicas in the same availability zone">
</div>
<div class="title">Figure 1. Example showing client consuming from replicas in the same availability zone</div>
</div>
<div class="paragraph">
<p>You can also configure Kafka Connect, MirrorMaker 2 and Kafka Bridge so that connectors consume messages from the closest replicas.
You enable rack awareness in the <code>KafkaConnect</code>, <code>KafkaMirrorMaker2</code>, and <code>KafkaBridge</code> custom resources.
The configuration does does not set affinity rules, but you can also configure <code>affinity</code> or <code>topologySpreadConstraints</code>.
For more information see <a href="./deploying.html#assembly-scheduling-str" target="_blank" rel="noopener">Configuring pod scheduling</a>.</p>
</div>
<div class="paragraph">
<p>When deploying Kafka Connect using Strimzi, you can use the <code>rack</code> section in the <code>KafkaConnect</code> custom resource to automatically configure the <code>client.rack</code> option.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>rack</code> configuration for Kafka Connect</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
# ...
spec:
  # ...
  rack:
    topologyKey: topology.kubernetes.io/zone
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>When deploying MirrorMaker 2 using Strimzi, you can use the <code>rack</code> section in the <code>KafkaMirrorMaker2</code> custom resource to automatically configure the <code>client.rack</code> option.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>rack</code> configuration for MirrorMaker 2</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
# ...
spec:
  # ...
  rack:
    topologyKey: topology.kubernetes.io/zone
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>When deploying Kafka Bridge using Strimzi, you can use the <code>rack</code> section in the <code>KafkaBridge</code> custom resource to automatically configure the <code>client.rack</code> option.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>rack</code> configuration for Kafka Bridge</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaBridge
# ...
spec:
  # ...
  rack:
    topologyKey: topology.kubernetes.io/zone
  # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-Rack-schema-reference"><a class="link" href="#type-Rack-schema-reference">25.3. <code>Rack</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topologyKey</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A key that matches labels assigned to the Kubernetes cluster nodes. The value of the label is used to set a broker&#8217;s <code>broker.rack</code> config, and the <code>client.rack</code> config for Kafka Connect or MirrorMaker 2.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-Probe-reference"><a class="link" href="#type-Probe-reference">26. <code>Probe</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a>, <a href="#type-EntityTopicOperatorSpec-reference"><code>EntityTopicOperatorSpec</code></a>, <a href="#type-EntityUserOperatorSpec-reference"><code>EntityUserOperatorSpec</code></a>, <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaExporterSpec-reference"><code>KafkaExporterSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a>, <a href="#type-TlsSidecar-reference"><code>TlsSidecar</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">failureThreshold</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">initialDelaySeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The initial delay before first the health is first checked. Default to 15 seconds. Minimum value is 0.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">periodSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">successThreshold</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">timeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The timeout for each attempted health check. Default to 5 seconds. Minimum value is 1.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JvmOptions-reference"><a class="link" href="#type-JvmOptions-reference">27. <code>JvmOptions</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a>, <a href="#type-EntityTopicOperatorSpec-reference"><code>EntityTopicOperatorSpec</code></a>, <a href="#type-EntityUserOperatorSpec-reference"><code>EntityUserOperatorSpec</code></a>, <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a>, <a href="#type-KafkaNodePoolSpec-reference"><code>KafkaNodePoolSpec</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-XX</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A map of -XX options to the JVM.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-Xms</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>-Xms option to to the JVM.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-Xmx</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>-Xmx option to to the JVM.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">gcLoggingEnabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies whether the Garbage Collection logging is enabled. The default is false.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">javaSystemProperties</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-SystemProperty-reference"><code>SystemProperty</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A map of additional system properties which will be passed using the <code>-D</code> option to the JVM.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-SystemProperty-reference"><a class="link" href="#type-SystemProperty-reference">28. <code>SystemProperty</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The system property name.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The system property value.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaJmxOptions-reference"><a class="link" href="#type-KafkaJmxOptions-reference">29. <code>KafkaJmxOptions</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaJmxOptions-schema-reference">Full list of <code>KafkaJmxOptions</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures JMX connection options.</p>
</div>
<div class="paragraph">
<p>Get JMX metrics from Kafka brokers, ZooKeeper nodes, Kafka Connect, and MirrorMaker 2. by connecting to port 9999.
Use the <code>jmxOptions</code> property to configure a password-protected or an unprotected JMX port.
Using password protection prevents unauthorized pods from accessing the port.</p>
</div>
<div class="paragraph">
<p>You can then obtain metrics about the component.</p>
</div>
<div class="paragraph">
<p>For example, for each Kafka broker you can obtain bytes-per-second usage data from clients,
or the request rate of the network of the broker.</p>
</div>
<div class="paragraph">
<p>To enable security for the JMX port, set the <code>type</code> parameter in the <code>authentication</code> field to <code>password</code>.</p>
</div>
<div class="listingblock">
<div class="title">Example password-protected JMX configuration for Kafka brokers and ZooKeeper nodes</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    jmxOptions:
      authentication:
        type: "password"
    # ...
  zookeeper:
    # ...
    jmxOptions:
      authentication:
        type: "password"
    #...</code></pre>
</div>
</div>
<div class="paragraph">
<p>You can then deploy a pod into a cluster and obtain JMX metrics using the headless
service by specifying which broker you want to address.</p>
</div>
<div class="paragraph">
<p>For example, to get JMX metrics from broker <em>0</em> you specify:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">"<em>CLUSTER-NAME</em>-kafka-0.<em>CLUSTER-NAME</em>-kafka-brokers"</code></pre>
</div>
</div>
<div class="paragraph">
<p><code><em>CLUSTER-NAME</em>-kafka-0</code> is name of the broker pod, and <code><em>CLUSTER-NAME</em>-kafka-brokers</code> is the name of the headless service to return the IPs of the broker pods.</p>
</div>
<div class="paragraph">
<p>If the JMX port is secured, you can get the username and password by referencing them from the JMX Secret in the
deployment of your pod.</p>
</div>
<div class="paragraph">
<p>For an unprotected JMX port, use an empty object <code>{}</code> to open the JMX port on the headless service.
You deploy a pod and obtain metrics in the same way as for the protected port, but in this case any pod can read from the JMX port.</p>
</div>
<div class="listingblock">
<div class="title">Example open port JMX configuration for Kafka brokers and ZooKeeper nodes</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    jmxOptions: {}
    # ...
  zookeeper:
    # ...
    jmxOptions: {}
    # ...</code></pre>
</div>
</div>
<div class="ulist _additional-resources">
<div class="title">Additional resources</div>
<ul>
<li>
<p>For more information on the Kafka component metrics exposed using JMX, see the <a href="https://kafka.apache.org/documentation/" target="_blank" rel="noopener">Apache Kafka documentation</a>.</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="type-KafkaJmxOptions-schema-reference"><a class="link" href="#type-KafkaJmxOptions-schema-reference">29.1. <code>KafkaJmxOptions</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaJmxAuthenticationPassword-reference"><code>KafkaJmxAuthenticationPassword</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication configuration for connecting to the JMX port.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaJmxAuthenticationPassword-reference"><a class="link" href="#type-KafkaJmxAuthenticationPassword-reference">30. <code>KafkaJmxAuthenticationPassword</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaJmxOptions-reference"><code>KafkaJmxOptions</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaJmxAuthenticationPassword</code> type from other subtypes which may be added in the future.
It must have the value <code>password</code> for the type <code>KafkaJmxAuthenticationPassword</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>password</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JmxPrometheusExporterMetrics-reference"><a class="link" href="#type-JmxPrometheusExporterMetrics-reference">31. <code>JmxPrometheusExporterMetrics</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>JmxPrometheusExporterMetrics</code> type from other subtypes which may be added in the future.
It must have the value <code>jmxPrometheusExporter</code> for the type <code>JmxPrometheusExporterMetrics</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>jmxPrometheusExporter</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">valueFrom</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ExternalConfigurationReference-reference"><code>ExternalConfigurationReference</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>ConfigMap entry where the Prometheus JMX Exporter configuration is stored.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ExternalConfigurationReference-reference"><a class="link" href="#type-ExternalConfigurationReference-reference">32. <code>ExternalConfigurationReference</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a>, <a href="#type-JmxPrometheusExporterMetrics-reference"><code>JmxPrometheusExporterMetrics</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configMapKeyRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#configmapkeyselector-v1-core">ConfigMapKeySelector</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to the key in the ConfigMap containing the configuration.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-InlineLogging-reference"><a class="link" href="#type-InlineLogging-reference">33. <code>InlineLogging</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a>, <a href="#type-EntityTopicOperatorSpec-reference"><code>EntityTopicOperatorSpec</code></a>, <a href="#type-EntityUserOperatorSpec-reference"><code>EntityUserOperatorSpec</code></a>, <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>InlineLogging</code> type from <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a>.
It must have the value <code>inline</code> for the type <code>InlineLogging</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>inline</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">loggers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A Map from logger name to logger level.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ExternalLogging-reference"><a class="link" href="#type-ExternalLogging-reference">34. <code>ExternalLogging</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a>, <a href="#type-EntityTopicOperatorSpec-reference"><code>EntityTopicOperatorSpec</code></a>, <a href="#type-EntityUserOperatorSpec-reference"><code>EntityUserOperatorSpec</code></a>, <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a>, <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>ExternalLogging</code> type from <a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>.
It must have the value <code>external</code> for the type <code>ExternalLogging</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>external</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">valueFrom</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ExternalConfigurationReference-reference"><code>ExternalConfigurationReference</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>ConfigMap</code> entry where the logging configuration is stored.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaClusterTemplate-reference"><a class="link" href="#type-KafkaClusterTemplate-reference">35. <code>KafkaClusterTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">statefulset</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-StatefulSetTemplate-reference"><code>StatefulSetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>statefulset</code> property has been deprecated.</strong> Support for StatefulSets was removed in Strimzi 0.35.0. This property is ignored. Template for Kafka <code>StatefulSet</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrapService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka bootstrap <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">brokersService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka broker <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">externalBootstrapService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka external bootstrap <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">perPodService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka per-pod <code>Services</code> used for access from outside of Kubernetes.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">externalBootstrapRoute</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka external bootstrap <code>Route</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">perPodRoute</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka per-pod <code>Routes</code> used for access from outside of OpenShift.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">externalBootstrapIngress</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka external bootstrap <code>Ingress</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">perPodIngress</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka per-pod <code>Ingress</code> used for access from outside of Kubernetes.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">persistentVolumeClaim</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for all Kafka <code>PersistentVolumeClaims</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podDisruptionBudget</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodDisruptionBudgetTemplate-reference"><code>PodDisruptionBudgetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka <code>PodDisruptionBudget</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka broker container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">initContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka init container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusterCaCert</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Secret with Kafka Cluster certificate public key.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka service account.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Secret of the Kafka Cluster JMX authentication.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusterRoleBinding</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka ClusterRoleBinding.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podSet</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka <code>StrimziPodSet</code> resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-StatefulSetTemplate-reference"><a class="link" href="#type-StatefulSetTemplate-reference">36. <code>StatefulSetTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterTemplate-reference"><code>KafkaClusterTemplate</code></a>, <a href="#type-ZookeeperClusterTemplate-reference"><code>ZookeeperClusterTemplate</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadata</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-MetadataTemplate-reference"><code>MetadataTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metadata applied to the resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podManagementPolicy</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [OrderedReady, Parallel])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>PodManagementPolicy which will be used for this StatefulSet. Valid values are <code>Parallel</code> and <code>OrderedReady</code>. Defaults to <code>Parallel</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-MetadataTemplate-reference"><a class="link" href="#type-MetadataTemplate-reference">37. <code>MetadataTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-BuildConfigTemplate-reference"><code>BuildConfigTemplate</code></a>, <a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a>, <a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a>, <a href="#type-PodDisruptionBudgetTemplate-reference"><code>PodDisruptionBudgetTemplate</code></a>, <a href="#type-PodTemplate-reference"><code>PodTemplate</code></a>, <a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a>, <a href="#type-StatefulSetTemplate-reference"><code>StatefulSetTemplate</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-MetadataTemplate-schema-reference">Full list of <code>MetadataTemplate</code> schema properties</a></p>
</div>
<div class="paragraph">
<p><code>Labels</code> and <code>Annotations</code> are used to identify and organize resources, and are configured in the <code>metadata</code> property.</p>
</div>
<div class="paragraph">
<p>For example:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
template:
  pod:
    metadata:
      labels:
        label1: value1
        label2: value2
      annotations:
        annotation1: value1
        annotation2: value2
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>labels</code> and <code>annotations</code> fields can contain any labels or annotations that do not contain the reserved string <code>strimzi.io</code>.
Labels and annotations containing <code>strimzi.io</code> are used internally by Strimzi and cannot be configured.</p>
</div>
<div class="sect2">
<h3 id="type-MetadataTemplate-schema-reference"><a class="link" href="#type-MetadataTemplate-schema-reference">37.1. <code>MetadataTemplate</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labels</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Labels added to the Kubernetes resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">annotations</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Annotations added to the Kubernetes resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-PodTemplate-reference"><a class="link" href="#type-PodTemplate-reference">38. <code>PodTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlTemplate-reference"><code>CruiseControlTemplate</code></a>, <a href="#type-EntityOperatorTemplate-reference"><code>EntityOperatorTemplate</code></a>, <a href="#type-JmxTransTemplate-reference"><code>JmxTransTemplate</code></a>, <a href="#type-KafkaBridgeTemplate-reference"><code>KafkaBridgeTemplate</code></a>, <a href="#type-KafkaClusterTemplate-reference"><code>KafkaClusterTemplate</code></a>, <a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a>, <a href="#type-KafkaExporterTemplate-reference"><code>KafkaExporterTemplate</code></a>, <a href="#type-KafkaMirrorMakerTemplate-reference"><code>KafkaMirrorMakerTemplate</code></a>, <a href="#type-KafkaNodePoolTemplate-reference"><code>KafkaNodePoolTemplate</code></a>, <a href="#type-ZookeeperClusterTemplate-reference"><code>ZookeeperClusterTemplate</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-PodTemplate-schema-reference">Full list of <code>PodTemplate</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures the template for Kafka pods.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>PodTemplate</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
template:
  pod:
    metadata:
      labels:
        label1: value1
      annotations:
        anno1: value1
    imagePullSecrets:
      - name: my-docker-credentials
    securityContext:
      runAsUser: 1000001
      fsGroup: 0
    terminationGracePeriodSeconds: 120
# ...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="property-hostaliases-config-reference"><a class="link" href="#property-hostaliases-config-reference">38.1. <code>hostAliases</code></a></h3>
<div class="paragraph">
<p>Use the <code>hostAliases</code> property to a specify a list of hosts and IP addresses,
which are injected into the <code>/etc/hosts</code> file of the pod.</p>
</div>
<div class="paragraph">
<p>This configuration is especially useful for Kafka Connect or MirrorMaker when a connection outside of the cluster is also requested by users.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>hostAliases</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
#...
spec:
  # ...
  template:
    pod:
      hostAliases:
      - ip: "192.168.1.86"
        hostnames:
        - "my-host-1"
        - "my-host-2"
      #...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-PodTemplate-schema-reference"><a class="link" href="#type-PodTemplate-schema-reference">38.2. <code>PodTemplate</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadata</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-MetadataTemplate-reference"><code>MetadataTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metadata applied to the resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">imagePullSecrets</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core">LocalObjectReference</a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of references to secrets in the same namespace to use for pulling any of the images used by this Pod. When the <code>STRIMZI_IMAGE_PULL_SECRETS</code> environment variable in Cluster Operator and the <code>imagePullSecrets</code> option are specified, only the <code>imagePullSecrets</code> variable is used and the <code>STRIMZI_IMAGE_PULL_SECRETS</code> variable is ignored.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">securityContext</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core">PodSecurityContext</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures pod-level security attributes and common container settings.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">terminationGracePeriodSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The grace period is the duration in seconds after the processes running in the pod are sent a termination signal, and the time when the processes are forcibly halted with a kill signal. Set this value to longer than the expected cleanup time for your process. Value must be a non-negative integer. A zero value indicates delete immediately. You might need to increase the grace period for very large Kafka clusters, so that the Kafka brokers have enough time to transfer their work to another broker before they are terminated. Defaults to 30 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">affinity</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#affinity-v1-core">Affinity</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The pod&#8217;s affinity rules.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tolerations</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#toleration-v1-core">Toleration</a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The pod&#8217;s tolerations.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">priorityClassName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the priority class used to assign priority to the pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">schedulerName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the scheduler used to dispatch this <code>Pod</code>. If not specified, the default scheduler will be used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">hostAliases</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#hostalias-v1-core">HostAlias</a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The pod&#8217;s HostAliases. HostAliases is an optional list of hosts and IPs that will be injected into the Pod&#8217;s hosts file if specified.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tmpDirSizeLimit</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Defines the total amount (for example <code>1Gi</code>) of local storage required for temporary EmptyDir volume (<code>/tmp</code>). Default value is <code>5Mi</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableServiceLinks</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Indicates whether information about services should be injected into Pod&#8217;s environment variables.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topologySpreadConstraints</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#topologyspreadconstraint-v1-core">TopologySpreadConstraint</a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The pod&#8217;s topology spread constraints.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-InternalServiceTemplate-reference"><a class="link" href="#type-InternalServiceTemplate-reference">39. <code>InternalServiceTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlTemplate-reference"><code>CruiseControlTemplate</code></a>, <a href="#type-KafkaBridgeTemplate-reference"><code>KafkaBridgeTemplate</code></a>, <a href="#type-KafkaClusterTemplate-reference"><code>KafkaClusterTemplate</code></a>, <a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a>, <a href="#type-ZookeeperClusterTemplate-reference"><code>ZookeeperClusterTemplate</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadata</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-MetadataTemplate-reference"><code>MetadataTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metadata applied to the resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ipFamilyPolicy</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [RequireDualStack, SingleStack, PreferDualStack])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies the IP Family Policy used by the service. Available options are <code>SingleStack</code>, <code>PreferDualStack</code> and <code>RequireDualStack</code>. <code>SingleStack</code> is for a single IP family. <code>PreferDualStack</code> is for two IP families on dual-stack configured clusters or a single IP family on single-stack clusters. <code>RequireDualStack</code> fails unless there are two IP families on dual-stack configured clusters. If unspecified, Kubernetes will choose the default value based on the service type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ipFamilies</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one or more of [IPv6, IPv4]) array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies the IP Families used by the service. Available options are <code>IPv4</code> and <code>IPv6</code>. If unspecified, Kubernetes will choose the default value based on the <code>ipFamilyPolicy</code> setting.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ResourceTemplate-reference"><a class="link" href="#type-ResourceTemplate-reference">40. <code>ResourceTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlTemplate-reference"><code>CruiseControlTemplate</code></a>, <a href="#type-EntityOperatorTemplate-reference"><code>EntityOperatorTemplate</code></a>, <a href="#type-JmxTransTemplate-reference"><code>JmxTransTemplate</code></a>, <a href="#type-KafkaBridgeTemplate-reference"><code>KafkaBridgeTemplate</code></a>, <a href="#type-KafkaClusterTemplate-reference"><code>KafkaClusterTemplate</code></a>, <a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a>, <a href="#type-KafkaExporterTemplate-reference"><code>KafkaExporterTemplate</code></a>, <a href="#type-KafkaMirrorMakerTemplate-reference"><code>KafkaMirrorMakerTemplate</code></a>, <a href="#type-KafkaNodePoolTemplate-reference"><code>KafkaNodePoolTemplate</code></a>, <a href="#type-KafkaUserTemplate-reference"><code>KafkaUserTemplate</code></a>, <a href="#type-ZookeeperClusterTemplate-reference"><code>ZookeeperClusterTemplate</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadata</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-MetadataTemplate-reference"><code>MetadataTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metadata applied to the resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-PodDisruptionBudgetTemplate-reference"><a class="link" href="#type-PodDisruptionBudgetTemplate-reference">41. <code>PodDisruptionBudgetTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlTemplate-reference"><code>CruiseControlTemplate</code></a>, <a href="#type-KafkaBridgeTemplate-reference"><code>KafkaBridgeTemplate</code></a>, <a href="#type-KafkaClusterTemplate-reference"><code>KafkaClusterTemplate</code></a>, <a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a>, <a href="#type-KafkaMirrorMakerTemplate-reference"><code>KafkaMirrorMakerTemplate</code></a>, <a href="#type-ZookeeperClusterTemplate-reference"><code>ZookeeperClusterTemplate</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-PodDisruptionBudgetTemplate-schema-reference">Full list of <code>PodDisruptionBudgetTemplate</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>A <code>PodDisruptionBudget</code> (PDB) is a Kubernetes resource that ensures high availability by specifying the minimum number of pods that must be available during planned maintenance or upgrades.
Strimzi creates a PDB for every new <code>StrimziPodSet</code> or <code>Deployment</code>.
By default, the PDB allows only one pod to be unavailable at any given time.
You can increase the number of unavailable pods allowed by changing the default value of the <code>maxUnavailable</code> property.</p>
</div>
<div class="paragraph">
<p><code>StrimziPodSet</code> custom resources manage pods using a custom controller that cannot use the <code>maxUnavailable</code> value directly.
Instead, the <code>maxUnavailable</code> value is automatically converted to a <code>minAvailable</code> value when creating the PDB resource, which effectively serves the same purpose, as illustrated in the following examples:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If there are three broker pods and the <code>maxUnavailable</code> property is set to <code>1</code> in the <code>Kafka</code> resource, the <code>minAvailable</code> setting is <code>2</code>, allowing one pod to be unavailable.</p>
</li>
<li>
<p>If there are three broker pods and the <code>maxUnavailable</code> property is set to <code>0</code> (zero), the <code>minAvailable</code> setting is <code>3</code>, requiring all three broker pods to be available and allowing zero pods to be unavailable.</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example <code>PodDisruptionBudget</code> template configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
template:
  podDisruptionBudget:
    metadata:
      labels:
        key1: label1
        key2: label2
      annotations:
        key1: label1
        key2: label2
    maxUnavailable: 1
# ...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="type-PodDisruptionBudgetTemplate-schema-reference"><a class="link" href="#type-PodDisruptionBudgetTemplate-schema-reference">41.1. <code>PodDisruptionBudgetTemplate</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadata</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-MetadataTemplate-reference"><code>MetadataTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metadata to apply to the <code>PodDisruptionBudgetTemplate</code> resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maxUnavailable</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Maximum number of unavailable pods to allow automatic Pod eviction. A Pod eviction is allowed when the <code>maxUnavailable</code> number of pods or fewer are unavailable after the eviction. Setting this value to 0 prevents all voluntary evictions, so the pods must be evicted manually. Defaults to 1.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-ContainerTemplate-reference"><a class="link" href="#type-ContainerTemplate-reference">42. <code>ContainerTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlTemplate-reference"><code>CruiseControlTemplate</code></a>, <a href="#type-EntityOperatorTemplate-reference"><code>EntityOperatorTemplate</code></a>, <a href="#type-JmxTransTemplate-reference"><code>JmxTransTemplate</code></a>, <a href="#type-KafkaBridgeTemplate-reference"><code>KafkaBridgeTemplate</code></a>, <a href="#type-KafkaClusterTemplate-reference"><code>KafkaClusterTemplate</code></a>, <a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a>, <a href="#type-KafkaExporterTemplate-reference"><code>KafkaExporterTemplate</code></a>, <a href="#type-KafkaMirrorMakerTemplate-reference"><code>KafkaMirrorMakerTemplate</code></a>, <a href="#type-KafkaNodePoolTemplate-reference"><code>KafkaNodePoolTemplate</code></a>, <a href="#type-ZookeeperClusterTemplate-reference"><code>ZookeeperClusterTemplate</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-ContainerTemplate-schema-reference">Full list of <code>ContainerTemplate</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>You can set custom security context and environment variables for a container.</p>
</div>
<div class="paragraph">
<p>The environment variables are defined under the <code>env</code> property as a list of objects with <code>name</code> and <code>value</code> fields.
The following example shows two custom environment variables and a custom security context set for the Kafka broker containers:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
template:
  kafkaContainer:
    env:
    - name: EXAMPLE_ENV_1
      value: example.env.one
    - name: EXAMPLE_ENV_2
      value: example.env.two
    securityContext:
      runAsUser: 2000
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>Environment variables prefixed with <code>KAFKA_</code> are internal to Strimzi and should be avoided.
If you set a custom environment variable that is already in use by Strimzi, it is ignored and a warning is recorded in the log.</p>
</div>
<div class="sect2">
<h3 id="type-ContainerTemplate-schema-reference"><a class="link" href="#type-ContainerTemplate-schema-reference">42.1. <code>ContainerTemplate</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">env</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerEnvVar-reference"><code>ContainerEnvVar</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Environment variables which should be applied to the container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">securityContext</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core">SecurityContext</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Security context for the container.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-ContainerEnvVar-reference"><a class="link" href="#type-ContainerEnvVar-reference">43. <code>ContainerEnvVar</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The environment variable key.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The environment variable value.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-TieredStorageCustom-reference"><a class="link" href="#type-TieredStorageCustom-reference">44. <code>TieredStorageCustom</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClusterSpec-reference"><code>KafkaClusterSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-TieredStorageCustom-schema-reference">Full list of <code>TieredStorageCustom</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To configure the tiered storage feature, set the <code>type</code> property to <code>custom</code>.</p>
</div>
<div class="paragraph">
<p><code>RemoteStorageManager</code> is a Kafka interface for managing the interaction between Kafka and remote tiered storage solutions.
Custom tiered storage enables the use of a custom <code>RemoteStorageManager</code> configuration.
If custom tiered storage is enabled, Strimzi uses the <a href="https://github.com/apache/kafka/blob/trunk/storage/src/main/java/org/apache/kafka/server/log/remote/metadata/storage/TopicBasedRemoteLogMetadataManager.java"><code>TopicBasedRemoteLogMetadataManager</code></a> for Remote Log Metadata Management (RLMM) configuration.
If you want to use custom tiered storage, you must first add the tiered storage plugin to the Strimzi image by building a custom container image.</p>
</div>
<div class="listingblock">
<div class="title">Example custom tiered storage configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">kafka:
  tieredStorage:
    type: custom
    remoteStorageManager:
      className: com.example.kafka.tiered.storage.s3.S3RemoteStorageManager
      classPath: /opt/kafka/plugins/tiered-storage-s3/*
      config:
        # A map with String keys and String values.
        # Key properties are automatically prefixed with `rsm.config.` and appended to Kafka broker config.
        storage.bucket.name: my-bucket
  config:
    ...
    # Additional RLMM configuration can be added through the Kafka config under `spec.kafka.config` using the `rlmm.config.` prefix.
    rlmm.config.remote.log.metadata.topic.replication.factor: 1</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="type-TieredStorageCustom-schema-reference"><a class="link" href="#type-TieredStorageCustom-schema-reference">44.1. <code>TieredStorageCustom</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>TieredStorageCustom</code> type from other subtypes which may be added in the future.
It must have the value <code>custom</code> for the type <code>TieredStorageCustom</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">remoteStorageManager</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-RemoteStorageManager-reference"><code>RemoteStorageManager</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration for the Remote Storage Manager.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>custom</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-RemoteStorageManager-reference"><a class="link" href="#type-RemoteStorageManager-reference">45. <code>RemoteStorageManager</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-TieredStorageCustom-reference"><code>TieredStorageCustom</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">className</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The class name for the <code>RemoteStorageManager</code> implementation.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">classPath</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The class path for the <code>RemoteStorageManager</code> implementation.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The additional configuration map for the <code>RemoteStorageManager</code> implementation. Keys will be automatically prefixed with <code>rsm.config.</code>, and added to Kafka broker configuration.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ZookeeperClusterSpec-reference"><a class="link" href="#type-ZookeeperClusterSpec-reference">46. <code>ZookeeperClusterSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-ZookeeperClusterSpec-schema-reference">Full list of <code>ZookeeperClusterSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a ZooKeeper cluster.</p>
</div>
<div class="sect2">
<h3 id="property-zookeeper-config-reference"><a class="link" href="#property-zookeeper-config-reference">46.1. <code>config</code></a></h3>
<div class="paragraph">
<p>Use the <code>config</code> properties to configure ZooKeeper options as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://zookeeper.apache.org/doc/r3.8.3/" target="_blank" rel="noopener">ZooKeeper documentation</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Listener configuration</p>
</li>
<li>
<p>Configuration of data directories</p>
</li>
<li>
<p>ZooKeeper cluster composition</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>4lw.commands.whitelist</code></p>
</li>
<li>
<p><code>authProvider</code></p>
</li>
<li>
<p><code>clientPort</code></p>
</li>
<li>
<p><code>dataDir</code></p>
</li>
<li>
<p><code>dataLogDir</code></p>
</li>
<li>
<p><code>quorum.auth</code></p>
</li>
<li>
<p><code>reconfigEnabled</code></p>
</li>
<li>
<p><code>requireClientAuthScheme</code></p>
</li>
<li>
<p><code>secureClientPort</code></p>
</li>
<li>
<p><code>server.</code></p>
</li>
<li>
<p><code>snapshot.trust.empty</code></p>
</li>
<li>
<p><code>standaloneEnabled</code></p>
</li>
<li>
<p><code>serverCnxnFactory</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
<li>
<p><code>sslQuorum</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to ZooKeeper, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example ZooKeeper configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
  kafka:
    # ...
  zookeeper:
    # ...
    config:
      autopurge.snapRetainCount: 3
      autopurge.purgeInterval: 2
    # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-zookeeper-logging-reference"><a class="link" href="#property-zookeeper-logging-reference">46.2. <code>logging</code></a></h3>
<div class="paragraph">
<p>ZooKeeper has a configurable logger:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>zookeeper.root.logger</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>ZooKeeper uses the Apache <code>log4j</code> logger implementation.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration. Inside the ConfigMap, the logging configuration is described using <code>log4j.properties</code>. Both <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory. A ConfigMap using the exact logging configuration specified is created with the custom resource when the Cluster Operator is running, then recreated after each reconciliation. If you do not specify a custom ConfigMap, default logging settings are used. If a specific logger value is not set, upper-level logger settings are inherited for that logger.
For more information about log levels, see <a href="https://logging.apache.org/" target="_blank" rel="noopener">Apache logging services</a>.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.
The <code>inline</code> logging specifies the root logger level.
You can also set log levels for specific classes or loggers by adding them to the loggers property.</p>
</div>
<div class="listingblock">
<div class="title">Inline logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
  # ...
  zookeeper:
    # ...
    logging:
      type: inline
      loggers:
        zookeeper.root.logger: INFO
        log4j.logger.org.apache.zookeeper.server.FinalRequestProcessor: TRACE
        log4j.logger.org.apache.zookeeper.server.ZooKeeperServer: DEBUG
    # ...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Setting a log level to <code>DEBUG</code> may result in a large amount of log output and may have performance implications.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">External logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
  # ...
  zookeeper:
    # ...
    logging:
      type: external
      valueFrom:
        configMapKeyRef:
          name: customConfigMap
          key: zookeeper-log4j.properties
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-ZookeeperClusterSpec-schema-reference"><a class="link" href="#type-ZookeeperClusterSpec-schema-reference">46.3. <code>ZookeeperClusterSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of pods in the cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for ZooKeeper pods. If no image name is explicitly specified, it is determined based on the Kafka version set in <code>spec.kafka.version</code>. The image names are specifically mapped to corresponding versions in the Cluster Operator configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">storage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EphemeralStorage-reference"><code>EphemeralStorage</code></a>, <a href="#type-PersistentClaimStorage-reference"><code>PersistentClaimStorage</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Storage configuration (disk). Cannot be updated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The ZooKeeper broker config. Properties with the following prefixes cannot be set: server., dataDir, dataLogDir, clientPort, authProvider, quorum.auth, requireClientAuthScheme, snapshot.trust.empty, standaloneEnabled, reconfigEnabled, 4lw.commands.whitelist, secureClientPort, ssl., serverCnxnFactory, sslQuorum (with the exception of: ssl.protocol, ssl.quorum.protocol, ssl.enabledProtocols, ssl.quorum.enabledProtocols, ssl.ciphersuites, ssl.quorum.ciphersuites, ssl.hostnameVerification, ssl.quorum.hostnameVerification).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaJmxOptions-reference"><code>KafkaJmxOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JMX Options for Zookeeper nodes.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metricsConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxPrometheusExporterMetrics-reference"><code>JmxPrometheusExporterMetrics</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metrics configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration for ZooKeeper.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ZookeeperClusterTemplate-reference"><code>ZookeeperClusterTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for ZooKeeper cluster resources. The template allows users to specify how the Kubernetes resources are generated.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-ZookeeperClusterTemplate-reference"><a class="link" href="#type-ZookeeperClusterTemplate-reference">47. <code>ZookeeperClusterTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ZookeeperClusterSpec-reference"><code>ZookeeperClusterSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">statefulset</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-StatefulSetTemplate-reference"><code>StatefulSetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>statefulset</code> property has been deprecated.</strong> Support for StatefulSets was removed in Strimzi 0.35.0. This property is ignored. Template for ZooKeeper <code>StatefulSet</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for ZooKeeper <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for ZooKeeper client <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">nodesService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for ZooKeeper nodes <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">persistentVolumeClaim</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for all ZooKeeper <code>PersistentVolumeClaims</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podDisruptionBudget</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodDisruptionBudgetTemplate-reference"><code>PodDisruptionBudgetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for ZooKeeper <code>PodDisruptionBudget</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">zookeeperContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the ZooKeeper container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the ZooKeeper service account.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Secret of the Zookeeper Cluster JMX authentication.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podSet</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for ZooKeeper <code>StrimziPodSet</code> resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-EntityOperatorSpec-reference"><a class="link" href="#type-EntityOperatorSpec-reference">48. <code>EntityOperatorSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicOperator</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EntityTopicOperatorSpec-reference"><code>EntityTopicOperatorSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the Topic Operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">userOperator</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EntityUserOperatorSpec-reference"><code>EntityUserOperatorSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the User Operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsSidecar</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-TlsSidecar-reference"><code>TlsSidecar</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>TLS sidecar configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EntityOperatorTemplate-reference"><code>EntityOperatorTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Entity Operator resources. The template allows users to specify how a <code>Deployment</code> and <code>Pod</code> is generated.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-EntityTopicOperatorSpec-reference"><a class="link" href="#type-EntityTopicOperatorSpec-reference">49. <code>EntityTopicOperatorSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-EntityOperatorSpec-reference"><code>EntityOperatorSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-EntityTopicOperatorSpec-schema-reference">Full list of <code>EntityTopicOperatorSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures the Topic Operator.</p>
</div>
<div class="sect2">
<h3 id="property-topic-operator-logging-reference"><a class="link" href="#property-topic-operator-logging-reference">49.1. <code>logging</code></a></h3>
<div class="paragraph">
<p>The Topic Operator has a configurable logger:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>rootLogger.level</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The Topic Operator uses the Apache <code>log4j2</code> logger implementation.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property in the <code>entityOperator.topicOperator</code> field of the Kafka resource <code>Kafka</code> resource to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration. Inside the ConfigMap, the logging configuration is described using <code>log4j2.properties</code>. Both <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory. A ConfigMap using the exact logging configuration specified is created with the custom resource when the Cluster Operator is running, then recreated after each reconciliation. If you do not specify a custom ConfigMap, default logging settings are used. If a specific logger value is not set, upper-level logger settings are inherited for that logger.
For more information about log levels, see <a href="https://logging.apache.org/" target="_blank" rel="noopener">Apache logging services</a>.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.
The <code>inline</code> logging specifies the root logger level.
You can also set log levels for specific classes or loggers by adding them to the loggers property.</p>
</div>
<div class="listingblock">
<div class="title">Inline logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    # ...
    topicOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalSeconds: 60
      logging:
        type: inline
        loggers:
          rootLogger.level: INFO
          logger.top.name: io.strimzi.operator.topic # <b class="conum">(1)</b>
          logger.top.level: DEBUG # <b class="conum">(2)</b>
          logger.toc.name: io.strimzi.operator.topic.TopicOperator # <b class="conum">(3)</b>
          logger.toc.level: TRACE # <b class="conum">(4)</b>
          logger.clients.level: DEBUG # <b class="conum">(5)</b>
  # ...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>Creates a logger for the <code>topic</code> package.</p>
</li>
<li>
<p>Sets the logging level for the <code>topic</code> package.</p>
</li>
<li>
<p>Creates a logger for the <code>TopicOperator</code> class.</p>
</li>
<li>
<p>Sets the logging level for the <code>TopicOperator</code> class.</p>
</li>
<li>
<p>Changes the logging level for the default <code>clients</code> logger. The <code>clients</code> logger is part of the logging configuration provided with Strimzi.
By default, it is set to <code>INFO</code>.</p>
</li>
</ol>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
When investigating an issue with the operator, it&#8217;s usually sufficient to change the <code>rootLogger</code> to <code>DEBUG</code> to get more detailed logs.
However, keep in mind that setting the log level to <code>DEBUG</code> may result in a large amount of log output and may have performance implications.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">External logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    # ...
    topicOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalSeconds: 60
      logging:
        type: external
        valueFrom:
          configMapKeyRef:
            name: customConfigMap
            key: topic-operator-log4j2.properties
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-EntityTopicOperatorSpec-schema-reference"><a class="link" href="#type-EntityTopicOperatorSpec-schema-reference">49.2. <code>EntityTopicOperatorSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">watchedNamespace</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The namespace the Topic Operator should watch.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The image to use for the Topic Operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">reconciliationIntervalSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Interval between periodic reconciliations.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">zookeeperSessionTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Timeout for the ZooKeeper session.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">startupProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod startup checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicMetadataMaxAttempts</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of attempts at getting topic metadata.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-EntityUserOperatorSpec-reference"><a class="link" href="#type-EntityUserOperatorSpec-reference">50. <code>EntityUserOperatorSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-EntityOperatorSpec-reference"><code>EntityOperatorSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-EntityUserOperatorSpec-schema-reference">Full list of <code>EntityUserOperatorSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures the User Operator.</p>
</div>
<div class="sect2">
<h3 id="property-user-operator-logging-reference"><a class="link" href="#property-user-operator-logging-reference">50.1. <code>logging</code></a></h3>
<div class="paragraph">
<p>The User Operator has a configurable logger:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>rootLogger.level</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The User Operator uses the Apache <code>log4j2</code> logger implementation.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property in the <code>entityOperator.userOperator</code> field of the <code>Kafka</code> resource to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration. Inside the ConfigMap, the logging configuration is described using <code>log4j2.properties</code>. Both <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory. A ConfigMap using the exact logging configuration specified is created with the custom resource when the Cluster Operator is running, then recreated after each reconciliation. If you do not specify a custom ConfigMap, default logging settings are used. If a specific logger value is not set, upper-level logger settings are inherited for that logger.
For more information about log levels, see <a href="https://logging.apache.org/" target="_blank" rel="noopener">Apache logging services</a>.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.
The <code>inline</code> logging specifies the <code>rootLogger.level</code>.
You can also set log levels for specific classes or loggers by adding them to the loggers property.</p>
</div>
<div class="listingblock">
<div class="title">Inline logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    # ...
    userOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalSeconds: 60
      logging:
        type: inline
        loggers:
          rootLogger.level: INFO
          logger.uop.name: io.strimzi.operator.user # <b class="conum">(1)</b>
          logger.uop.level: DEBUG # <b class="conum">(2)</b>
          logger.abstractcache.name: io.strimzi.operator.user.operator.cache.AbstractCache # <b class="conum">(3)</b>
          logger.abstractcache.level: TRACE # <b class="conum">(4)</b>
          logger.jetty.level: DEBUG # <b class="conum">(5)</b>

  # ...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>Creates a logger for the <code>user</code> package.</p>
</li>
<li>
<p>Sets the logging level for the <code>user</code> package.</p>
</li>
<li>
<p>Creates a logger for the <code>AbstractCache</code> class.</p>
</li>
<li>
<p>Sets the logging level for the <code>AbstractCache</code> class.</p>
</li>
<li>
<p>Changes the logging level for the default <code>jetty</code> logger. The <code>jetty</code> logger is part of the logging configuration provided with Strimzi.
By default, it is set to <code>INFO</code>.</p>
</li>
</ol>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
When investigating an issue with the operator, it&#8217;s usually sufficient to change the <code>rootLogger</code> to <code>DEBUG</code> to get more detailed logs. However, keep in mind that setting the log level to <code>DEBUG</code> may result in a large amount of log output and may have performance implications.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">External logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    # ...
    userOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalSeconds: 60
      logging:
        type: external
        valueFrom:
          configMapKeyRef:
            name: customConfigMap
            key: user-operator-log4j2.properties
   # ...</code></pre>
</div>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-EntityUserOperatorSpec-schema-reference"><a class="link" href="#type-EntityUserOperatorSpec-schema-reference">50.2. <code>EntityUserOperatorSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">watchedNamespace</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The namespace the User Operator should watch.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The image to use for the User Operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">reconciliationIntervalSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Interval between periodic reconciliations.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">zookeeperSessionTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>zookeeperSessionTimeoutSeconds</code> property has been deprecated.</strong> This property has been deprecated because ZooKeeper is not used anymore by the User Operator. Timeout for the ZooKeeper session.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secretPrefix</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The prefix that will be added to the KafkaUser name to be used as the Secret name.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-TlsSidecar-reference"><a class="link" href="#type-TlsSidecar-reference">51. <code>TlsSidecar</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a>, <a href="#type-EntityOperatorSpec-reference"><code>EntityOperatorSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-TlsSidecar-schema-reference">Full list of <code>TlsSidecar</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a TLS sidecar, which is a container that runs in a pod, but serves a supporting purpose.
In Strimzi, the TLS sidecar uses TLS to encrypt and decrypt communication between components and ZooKeeper.</p>
</div>
<div class="paragraph">
<p>The TLS sidecar is used in the Entity Operator.</p>
</div>
<div class="paragraph">
<p>The TLS sidecar is configured using the <code>tlsSidecar</code> property in <code>Kafka.spec.entityOperator</code>.</p>
</div>
<div class="paragraph">
<p>The TLS sidecar supports the following additional options:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>image</code></p>
</li>
<li>
<p><code>resources</code></p>
</li>
<li>
<p><code>logLevel</code></p>
</li>
<li>
<p><code>readinessProbe</code></p>
</li>
<li>
<p><code>livenessProbe</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The <code>resources</code> property specifies the <a href="#con-common-configuration-resources-reference">memory and CPU resources</a> allocated for the TLS sidecar.</p>
</div>
<div class="paragraph">
<p>The <code>image</code> property configures the <a href="#con-common-configuration-images-reference">container image</a> which will be used.</p>
</div>
<div class="paragraph">
<p>The <code>readinessProbe</code> and <code>livenessProbe</code> properties configure <a href="#con-common-configuration-healthchecks-reference">healthcheck probes</a> for the TLS sidecar.</p>
</div>
<div class="paragraph">
<p>The <code>logLevel</code> property specifies the logging level.
The following logging levels are supported:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>emerg</p>
</li>
<li>
<p>alert</p>
</li>
<li>
<p>crit</p>
</li>
<li>
<p>err</p>
</li>
<li>
<p>warning</p>
</li>
<li>
<p>notice</p>
</li>
<li>
<p>info</p>
</li>
<li>
<p>debug</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The default value is <em>notice</em>.</p>
</div>
<div class="listingblock">
<div class="title">Example TLS sidecar configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  entityOperator:
    # ...
    tlsSidecar:
      resources:
        requests:
          cpu: 200m
          memory: 64Mi
        limits:
          cpu: 500m
          memory: 128Mi
    # ...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="type-TlsSidecar-schema-reference"><a class="link" href="#type-TlsSidecar-schema-reference">51.1. <code>TlsSidecar</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The docker image for the container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logLevel</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [emerg, debug, crit, err, alert, warning, notice, info])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The log level for the TLS sidecar. Default value is <code>notice</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-EntityOperatorTemplate-reference"><a class="link" href="#type-EntityOperatorTemplate-reference">52. <code>EntityOperatorTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-EntityOperatorSpec-reference"><code>EntityOperatorSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Entity Operator <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Entity Operator <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicOperatorContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Entity Topic Operator container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">userOperatorContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Entity User Operator container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsSidecarContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Entity Operator TLS sidecar container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Entity Operator service account.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">entityOperatorRole</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Entity Operator Role.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicOperatorRoleBinding</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Entity Topic Operator RoleBinding.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">userOperatorRoleBinding</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Entity Topic Operator RoleBinding.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-DeploymentTemplate-reference"><a class="link" href="#type-DeploymentTemplate-reference">53. <code>DeploymentTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlTemplate-reference"><code>CruiseControlTemplate</code></a>, <a href="#type-EntityOperatorTemplate-reference"><code>EntityOperatorTemplate</code></a>, <a href="#type-JmxTransTemplate-reference"><code>JmxTransTemplate</code></a>, <a href="#type-KafkaBridgeTemplate-reference"><code>KafkaBridgeTemplate</code></a>, <a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a>, <a href="#type-KafkaExporterTemplate-reference"><code>KafkaExporterTemplate</code></a>, <a href="#type-KafkaMirrorMakerTemplate-reference"><code>KafkaMirrorMakerTemplate</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-DeploymentTemplate-schema-reference">Full list of <code>DeploymentTemplate</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Use <code>deploymentStrategy</code> to specify the strategy used to replace old pods with new ones when deployment configuration changes.</p>
</div>
<div class="paragraph">
<p>Use one of the following values:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>RollingUpdate</code>: Pods are restarted with zero downtime.</p>
</li>
<li>
<p><code>Recreate</code>: Pods are terminated before new ones are created.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Using the <code>Recreate</code> deployment strategy has the advantage of not requiring spare resources, but the disadvantage is the application downtime.</p>
</div>
<div class="listingblock">
<div class="title">Example showing the deployment strategy set to <code>Recreate</code>.</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml"># ...
template:
  deployment:
    deploymentStrategy: Recreate
# ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>This configuration change does not cause a rolling update.</p>
</div>
<div class="sect2">
<h3 id="type-DeploymentTemplate-schema-reference"><a class="link" href="#type-DeploymentTemplate-schema-reference">53.1. <code>DeploymentTemplate</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadata</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-MetadataTemplate-reference"><code>MetadataTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metadata applied to the resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deploymentStrategy</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [RollingUpdate, Recreate])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod replacement strategy for deployment configuration changes. Valid values are <code>RollingUpdate</code> and <code>Recreate</code>. Defaults to <code>RollingUpdate</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-CertificateAuthority-reference"><a class="link" href="#type-CertificateAuthority-reference">54. <code>CertificateAuthority</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p>
</div>
<div class="paragraph">
<p>Configuration of how TLS certificates are used within the cluster. This applies to certificates used for both internal communication within the cluster and to certificates used for client access via <code>Kafka.spec.kafka.listeners.tls</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">generateCertificateAuthority</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>If true then Certificate Authority certificates will be generated automatically. Otherwise the user will need to provide a Secret with the CA certificate. Default is true.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">generateSecretOwnerReference</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>If <code>true</code>, the Cluster and Client CA Secrets are configured with the <code>ownerReference</code> set to the <code>Kafka</code> resource. If the <code>Kafka</code> resource is deleted when <code>true</code>, the CA Secrets are also deleted. If <code>false</code>, the <code>ownerReference</code> is disabled. If the <code>Kafka</code> resource is deleted when <code>false</code>, the CA Secrets are retained and available for reuse. Default is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">validityDays</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of days generated certificates should be valid for. The default is 365.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">renewalDays</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of days in the certificate renewal period. This is the number of days before the a certificate expires during which renewal actions may be performed. When <code>generateCertificateAuthority</code> is true, this will cause the generation of a new certificate. When <code>generateCertificateAuthority</code> is true, this will cause extra logging at WARN level about the pending certificate expiry. Default is 30.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">certificateExpirationPolicy</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [replace-key, renew-certificate])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>How should CA certificate expiration be handled when <code>generateCertificateAuthority=true</code>. The default is for a new CA certificate to be generated reusing the existing private key.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-CruiseControlSpec-reference"><a class="link" href="#type-CruiseControlSpec-reference">55. <code>CruiseControlSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-CruiseControlSpec-schema-reference">Full list of <code>CruiseControlSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a Cruise Control cluster.</p>
</div>
<div class="paragraph">
<p>Configuration options relate to:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Goals configuration</p>
</li>
<li>
<p>Capacity limits for resource distribution goals</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="property-cruise-control-config-reference"><a class="link" href="#property-cruise-control-config-reference">55.1. <code>config</code></a></h3>
<div class="paragraph">
<p>Use the <code>config</code> properties to configure Cruise Control options as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://github.com/linkedin/cruise-control/wiki/Configurations" target="_blank" rel="noopener">Cruise Control documentation</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Connection to the Kafka cluster</p>
</li>
<li>
<p>Client ID configuration</p>
</li>
<li>
<p>ZooKeeper connectivity</p>
</li>
<li>
<p>Web server configuration</p>
</li>
<li>
<p>Self healing</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>bootstrap.servers</code></p>
</li>
<li>
<p><code>capacity.config.file</code></p>
</li>
<li>
<p><code>client.id</code></p>
</li>
<li>
<p><code>failed.brokers.zk.path</code></p>
</li>
<li>
<p><code>kafka.broker.failure.detection.enable</code></p>
</li>
<li>
<p><code>metric.reporter.sampler.bootstrap.servers</code></p>
</li>
<li>
<p><code>network.</code></p>
</li>
<li>
<p><code>request.reason.required</code></p>
</li>
<li>
<p><code>security.</code></p>
</li>
<li>
<p><code>self.healing.</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
<li>
<p><code>topic.config.provider.class</code></p>
</li>
<li>
<p><code>two.step.</code></p>
</li>
<li>
<p><code>webserver.accesslog.</code></p>
</li>
<li>
<p><code>webserver.api.urlprefix</code></p>
</li>
<li>
<p><code>webserver.http.</code></p>
</li>
<li>
<p><code>webserver.session.path</code></p>
</li>
<li>
<p><code>zookeeper.</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to Cruise Control, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
<li>
<p>Configuration for <code>webserver</code> properties to enable Cross-Origin Resource Sharing (CORS)</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example Cruise Control configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    # ...
    config:
      # Note that `default.goals` (superset) must also include all `hard.goals` (subset)
      default.goals: &gt;
        com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaCapacityGoal
      hard.goals: &gt;
        com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal
      cpu.balance.threshold: 1.1
      metadata.max.age.ms: 300000
      send.buffer.bytes: 131072
      webserver.http.cors.enabled: true
      webserver.http.cors.origin: "*"
      webserver.http.cors.exposeheaders: "User-Task-ID,Content-Type"
    # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-cruise-control-config-cors-reference"><a class="link" href="#property-cruise-control-config-cors-reference">55.2. Cross-Origin Resource Sharing (CORS)</a></h3>
<div class="paragraph">
<p>Cross-Origin Resource Sharing (CORS) is a HTTP mechanism for controlling access to REST APIs.
Restrictions can be on access methods or originating URLs of client applications.
You can enable CORS with Cruise Control using the <code>webserver.http.cors.enabled</code> property in the <code>config</code>.
When enabled, CORS permits read access to the Cruise Control REST API from applications that have different originating URLs than Strimzi.
This allows applications from specified origins to use <code>GET</code> requests to fetch information about the Kafka cluster through the Cruise Control API.
For example, applications can fetch information on the current cluster load or the most recent optimization proposal.
<code>POST</code> requests are not permitted.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
For more information on using CORS with Cruise Control, see <a href="https://github.com/linkedin/cruise-control/wiki/REST-APIs" target="_blank" rel="noopener">REST APIs in the Cruise Control Wiki</a>.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<div class="title">Enabling CORS for Cruise Control</div>
<p>You enable and configure CORS in <code>Kafka.spec.cruiseControl.config</code>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    # ...
    config:
      webserver.http.cors.enabled: true # <b class="conum">(1)</b>
      webserver.http.cors.origin: "*" # <b class="conum">(2)</b>
      webserver.http.cors.exposeheaders: "User-Task-ID,Content-Type" # <b class="conum">(3)</b>

    # ...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>Enables CORS.</p>
</li>
<li>
<p>Specifies permitted origins for the <code>Access-Control-Allow-Origin</code> HTTP response header. You can use a wildcard or specify a single origin as a URL. If you use a wildcard, a response is returned following requests from any origin.</p>
</li>
<li>
<p>Exposes specified header names for the <code>Access-Control-Expose-Headers</code> HTTP response header. Applications in permitted origins can read responses with the specified headers.</p>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="cruise_control_rest_api_security"><a class="link" href="#cruise_control_rest_api_security">55.3. Cruise Control REST API security</a></h3>
<div class="paragraph">
<p>The Cruise Control REST API is secured with HTTP Basic authentication and SSL to protect the cluster against potentially destructive Cruise Control operations, such as decommissioning Kafka brokers.
We recommend that Cruise Control in Strimzi is <strong>only used with these settings enabled</strong>.</p>
</div>
<div class="paragraph">
<p>However, it is possible to disable these settings by specifying the following Cruise Control configuration:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>To disable the built-in HTTP Basic authentication, set <code>webserver.security.enable</code> to <code>false</code>.</p>
</li>
<li>
<p>To disable the built-in SSL, set <code>webserver.ssl.enable</code> to <code>false</code>.</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Cruise Control configuration to disable API authorization, authentication, and SSL</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    config:
      webserver.security.enable: false
      webserver.ssl.enable: false
# ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-cruise-control-broker-capacity-reference"><a class="link" href="#property-cruise-control-broker-capacity-reference">55.4. brokerCapacity</a></h3>
<div class="paragraph">
<p>Cruise Control uses capacity limits to determine if optimization goals for resource capacity limits are being broken.
There are four goals of this type:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>DiskCapacityGoal</code>            - Disk utilization capacity</p>
</li>
<li>
<p><code>CpuCapacityGoal</code>             - CPU utilization capacity</p>
</li>
<li>
<p><code>NetworkInboundCapacityGoal</code>  - Network inbound utilization capacity</p>
</li>
<li>
<p><code>NetworkOutboundCapacityGoal</code> - Network outbound utilization capacity</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You specify capacity limits for Kafka broker resources in the <code>brokerCapacity</code> property in <code>Kafka.spec.cruiseControl</code> .
They are enabled by default and you can change their default values.
Capacity limits can be set for the following broker resources:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>cpu</code>             - CPU resource in millicores or CPU cores (Default: 1)</p>
</li>
<li>
<p><code>inboundNetwork</code>  - Inbound network throughput in byte units per second (Default: 10000KiB/s)</p>
</li>
<li>
<p><code>outboundNetwork</code> - Outbound network throughput in byte units per second (Default: 10000KiB/s)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>For network throughput, use an integer value with standard Kubernetes byte units (K, M, G) or their bibyte (power of two) equivalents (Ki, Mi, Gi) per second.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Disk and CPU capacity limits are automatically generated by Strimzi, so you do not need to set them.
In order to guarantee accurate rebalance proposals when using CPU goals, you can set CPU requests equal to CPU limits in <code>Kafka.spec.kafka.resources</code>.
That way, all CPU resources are reserved upfront and are always available.
This configuration allows Cruise Control to properly evaluate the CPU utilization when preparing the rebalance proposals based on CPU goals.
In cases where you cannot set CPU requests equal to CPU limits in <code>Kafka.spec.kafka.resources</code>, you can set the CPU capacity manually for the same accuracy.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">Example Cruise Control brokerCapacity configuration using bibyte units</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    # ...
    brokerCapacity:
      cpu: "2"
      inboundNetwork: 10000KiB/s
      outboundNetwork: 10000KiB/s
    # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="property-cruise-control-capacity-overrides-reference"><a class="link" href="#property-cruise-control-capacity-overrides-reference">55.5. Capacity overrides</a></h3>
<div class="paragraph">
<p>Brokers might be running on nodes with heterogeneous network or CPU resources.
If that&#8217;s the case, specify <code>overrides</code> that set the network capacity and CPU limits for each broker.
The overrides ensure an accurate rebalance between the brokers.
Override capacity limits can be set for the following broker resources:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>cpu</code>             - CPU resource in millicores or CPU cores (Default: 1)</p>
</li>
<li>
<p><code>inboundNetwork</code>  - Inbound network throughput in byte units per second (Default: 10000KiB/s)</p>
</li>
<li>
<p><code>outboundNetwork</code> - Outbound network throughput in byte units per second (Default: 10000KiB/s)</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">An example of Cruise Control capacity overrides configuration using bibyte units</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    # ...
    brokerCapacity:
      cpu: "1"
      inboundNetwork: 10000KiB/s
      outboundNetwork: 10000KiB/s
      overrides:
      - brokers: [0]
        cpu: "2.755"
        inboundNetwork: 20000KiB/s
        outboundNetwork: 20000KiB/s
      - brokers: [1, 2]
        cpu: 3000m
        inboundNetwork: 30000KiB/s
        outboundNetwork: 30000KiB/s</code></pre>
</div>
</div>
<div class="paragraph">
<p>CPU capacity is determined using configuration values in the following order of precedence, with the highest priority first:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p><code>Kafka.spec.cruiseControl.brokerCapacity.overrides.cpu</code> that define custom CPU capacity limits for individual brokers</p>
</li>
<li>
<p><code>Kafka.cruiseControl.brokerCapacity.cpu</code> that defines custom CPU capacity limits for all brokers in the kafka cluster</p>
</li>
<li>
<p><code>Kafka.spec.kafka.resources.requests.cpu</code> that defines the CPU resources that are reserved for each broker in the Kafka cluster.</p>
</li>
<li>
<p><code>Kafka.spec.kafka.resources.limits.cpu</code> that defines the maximum CPU resources that can be consumed by each broker in the Kafka cluster.</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>This order of precedence is the sequence in which different configuration values are considered when determining the actual capacity limit for a Kafka broker.
For example, broker-specific overrides take precedence over capacity limits for all brokers.
If none of the CPU capacity configurations are specified, the default CPU capacity for a Kafka broker is set to 1 CPU core.</p>
</div>
<div class="paragraph">
<p>For more information, refer to the <a href="#type-BrokerCapacity-reference">BrokerCapacity schema reference</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-cruise-control-logging-reference"><a class="link" href="#property-cruise-control-logging-reference">55.6. <code>logging</code></a></h3>
<div class="paragraph">
<p>Cruise Control has its own configurable logger:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>rootLogger.level</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Cruise Control uses the Apache <code>log4j2</code> logger implementation.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration. Inside the ConfigMap, the logging configuration is described using <code>log4j.properties</code>. Both <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory. A ConfigMap using the exact logging configuration specified is created with the custom resource when the Cluster Operator is running, then recreated after each reconciliation. If you do not specify a custom ConfigMap, default logging settings are used. If a specific logger value is not set, upper-level logger settings are inherited for that logger.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.
The <code>inline</code> logging specifies the root logger level.
You can also set log levels for specific classes or loggers by adding them to the loggers property.</p>
</div>
<div class="listingblock">
<div class="title">Inline logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
  cruiseControl:
    # ...
    logging:
      type: inline
      loggers:
        rootLogger.level: INFO
        logger.exec.name: com.linkedin.kafka.cruisecontrol.executor.Executor # <b class="conum">(1)</b>
        logger.exec.level: TRACE # <b class="conum">(2)</b>
        logger.go.name: com.linkedin.kafka.cruisecontrol.analyzer.GoalOptimizer # <b class="conum">(3)</b>
        logger.go.level: DEBUG # <b class="conum">(4)</b>
    # ...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>Creates a logger for the Cruise Control <code>Executor</code> class.</p>
</li>
<li>
<p>Sets the logging level for the <code>Executor</code> class.</p>
</li>
<li>
<p>Creates a logger for the Cruise Control <code>GoalOptimizer</code> class.</p>
</li>
<li>
<p>Sets the logging level for the <code>GoalOptimizer</code> class.</p>
</li>
</ol>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
When investigating an issue with Cruise Control, it&#8217;s usually sufficient to change the <code>rootLogger</code> to <code>DEBUG</code> to get more detailed logs. However, keep in mind that setting the log level to <code>DEBUG</code> may result in a large amount of log output and may have performance implications.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">External logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
  cruiseControl:
    # ...
    logging:
      type: external
      valueFrom:
        configMapKeyRef:
          name: customConfigMap
          key: cruise-control-log4j.properties
    # ...</code></pre>
</div>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-CruiseControlSpec-schema-reference"><a class="link" href="#type-CruiseControlSpec-schema-reference">55.7. <code>CruiseControlSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for Cruise Control pods. If no image name is explicitly specified, the image name corresponds to the name specified in the Cluster Operator configuration. If an image name is not defined in the Cluster Operator configuration, a default value is used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsSidecar</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-TlsSidecar-reference"><code>TlsSidecar</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>tlsSidecar</code> property has been deprecated.</strong> TLS sidecar configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve for the Cruise Control container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking for the Cruise Control container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking for the Cruise Control container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for the Cruise Control container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration (Log4j 2) for Cruise Control.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CruiseControlTemplate-reference"><code>CruiseControlTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template to specify how Cruise Control resources, <code>Deployments</code> and <code>Pods</code>, are generated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">brokerCapacity</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-BrokerCapacity-reference"><code>BrokerCapacity</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Cruise Control <code>brokerCapacity</code> configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Cruise Control configuration. For a full list of configuration options refer to <a href="https://github.com/linkedin/cruise-control/wiki/Configurations" class="bare">https://github.com/linkedin/cruise-control/wiki/Configurations</a>. Note that properties with the following prefixes cannot be set: bootstrap.servers, client.id, zookeeper., network., security., failed.brokers.zk.path,webserver.http., webserver.api.urlprefix, webserver.session.path, webserver.accesslog., two.step., request.reason.required,metric.reporter.sampler.bootstrap.servers, capacity.config.file, self.healing., ssl., kafka.broker.failure.detection.enable, topic.config.provider.class (with the exception of: ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols, webserver.http.cors.enabled, webserver.http.cors.origin, webserver.http.cors.exposeheaders, webserver.security.enable, webserver.ssl.enable).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metricsConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxPrometheusExporterMetrics-reference"><code>JmxPrometheusExporterMetrics</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metrics configuration.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-CruiseControlTemplate-reference"><a class="link" href="#type-CruiseControlTemplate-reference">56. <code>CruiseControlTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Cruise Control <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Cruise Control <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">apiService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Cruise Control API <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podDisruptionBudget</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodDisruptionBudgetTemplate-reference"><code>PodDisruptionBudgetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Cruise Control <code>PodDisruptionBudget</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">cruiseControlContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Cruise Control container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsSidecarContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>tlsSidecarContainer</code> property has been deprecated.</strong> Template for the Cruise Control TLS sidecar container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Cruise Control service account.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-BrokerCapacity-reference"><a class="link" href="#type-BrokerCapacity-reference">57. <code>BrokerCapacity</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-CruiseControlSpec-reference"><code>CruiseControlSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">disk</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>disk</code> property has been deprecated.</strong> The Cruise Control disk capacity setting has been deprecated, is ignored, and will be removed in the future Broker capacity for disk in bytes. Use a number value with either standard Kubernetes byte units (K, M, G, or T), their bibyte (power of two) equivalents (Ki, Mi, Gi, or Ti), or a byte value with or without E notation. For example, 100000M, 100000Mi, 104857600000, or 1e+11.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">cpuUtilization</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>cpuUtilization</code> property has been deprecated.</strong> The Cruise Control CPU capacity setting has been deprecated, is ignored, and will be removed in the future Broker capacity for CPU resource utilization as a percentage (0 - 100).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">cpu</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Broker capacity for CPU resource in cores or millicores. For example, 1, 1.500, 1500m. For more information on valid CPU resource units see <a href="https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu" class="bare">https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">inboundNetwork</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Broker capacity for inbound network throughput in bytes per second. Use an integer value with standard Kubernetes byte units (K, M, G) or their bibyte (power of two) equivalents (Ki, Mi, Gi) per second. For example, 10000KiB/s.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">outboundNetwork</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Broker capacity for outbound network throughput in bytes per second. Use an integer value with standard Kubernetes byte units (K, M, G) or their bibyte (power of two) equivalents (Ki, Mi, Gi) per second. For example, 10000KiB/s.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">overrides</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-BrokerCapacityOverride-reference"><code>BrokerCapacityOverride</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Overrides for individual brokers. The <code>overrides</code> property lets you specify a different capacity configuration for different brokers.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-BrokerCapacityOverride-reference"><a class="link" href="#type-BrokerCapacityOverride-reference">58. <code>BrokerCapacityOverride</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-BrokerCapacity-reference"><code>BrokerCapacity</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">brokers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of Kafka brokers (broker identifiers).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">cpu</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Broker capacity for CPU resource in cores or millicores. For example, 1, 1.500, 1500m. For more information on valid CPU resource units see <a href="https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu" class="bare">https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">inboundNetwork</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Broker capacity for inbound network throughput in bytes per second. Use an integer value with standard Kubernetes byte units (K, M, G) or their bibyte (power of two) equivalents (Ki, Mi, Gi) per second. For example, 10000KiB/s.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">outboundNetwork</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Broker capacity for outbound network throughput in bytes per second. Use an integer value with standard Kubernetes byte units (K, M, G) or their bibyte (power of two) equivalents (Ki, Mi, Gi) per second. For example, 10000KiB/s.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JmxTransSpec-reference"><a class="link" href="#type-JmxTransSpec-reference">59. <code>JmxTransSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p><strong>The type <code>JmxTransSpec</code> has been deprecated.</strong></p>
</div>
<div class="paragraph">
<p>Used in: <a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The image to use for the JmxTrans.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">outputDefinitions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxTransOutputDefinitionTemplate-reference"><code>JmxTransOutputDefinitionTemplate</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Defines the output hosts that will be referenced later on. For more information on these properties see, <a href="#type-JmxTransOutputDefinitionTemplate-reference"><code>JmxTransOutputDefinitionTemplate</code> schema reference</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logLevel</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Sets the logging level of the JmxTrans deployment.For more information see, <a href="https://github.com/jmxtrans/jmxtrans-agent/wiki/Troubleshooting">JmxTrans Logging Level</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaQueries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxTransQueryTemplate-reference"><code>JmxTransQueryTemplate</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Queries to send to the Kafka brokers to define what data should be read from each broker. For more information on these properties see, <a href="#type-JmxTransQueryTemplate-reference"><code>JmxTransQueryTemplate</code> schema reference</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxTransTemplate-reference"><code>JmxTransTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for JmxTrans resources.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JmxTransOutputDefinitionTemplate-reference"><a class="link" href="#type-JmxTransOutputDefinitionTemplate-reference">60. <code>JmxTransOutputDefinitionTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-JmxTransSpec-reference"><code>JmxTransSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">outputType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for setting the format of the data that will be pushed.For more information see <a href="https://github.com/jmxtrans/jmxtrans/wiki/OutputWriters">JmxTrans OutputWriters</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The DNS/hostname of the remote host that the data is pushed to.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">port</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The port of the remote host that the data is pushed to.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">flushDelayInSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>How many seconds the JmxTrans waits before pushing a new set of data out.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">typeNames</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for filtering data to be included in response to a wildcard query. For more information see <a href="https://github.com/jmxtrans/jmxtrans/wiki/Queries">JmxTrans queries</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for setting the name of the output definition. This is used to identify where to send the results of queries should be sent.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JmxTransQueryTemplate-reference"><a class="link" href="#type-JmxTransQueryTemplate-reference">61. <code>JmxTransQueryTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-JmxTransSpec-reference"><code>JmxTransSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">targetMBean</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>If using wildcards instead of a specific MBean then the data is gathered from multiple MBeans. Otherwise if specifying an MBean then data is gathered from that specified MBean.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">attributes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Determine which attributes of the targeted MBean should be included.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">outputs</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of the names of output definitions specified in the spec.kafka.jmxTrans.outputDefinitions that have defined where JMX metrics are pushed to, and in which data format.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JmxTransTemplate-reference"><a class="link" href="#type-JmxTransTemplate-reference">62. <code>JmxTransTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-JmxTransSpec-reference"><code>JmxTransSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for JmxTrans <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for JmxTrans <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">container</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for JmxTrans container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the JmxTrans service account.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaExporterSpec-reference"><a class="link" href="#type-KafkaExporterSpec-reference">63. <code>KafkaExporterSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaSpec-reference"><code>KafkaSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for the Kafka Exporter pods. If no image name is explicitly specified, the image name corresponds to the version specified in the Cluster Operator configuration. If an image name is not defined in the Cluster Operator configuration, a default value is used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupRegex</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Regular expression to specify which consumer groups to collect. Default value is <code>.*</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicRegex</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Regular expression to specify which topics to collect. Default value is <code>.*</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupExcludeRegex</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Regular expression to specify which consumer groups to exclude.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicExcludeRegex</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Regular expression to specify which topics to exclude.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Only log messages with the given severity or above. Valid levels: [<code>info</code>, <code>debug</code>, <code>trace</code>]. Default log level is <code>info</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableSaramaLogging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable Sarama logging, a Go client library used by the Kafka Exporter.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">showAllOffsets</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether show the offset/lag for all consumer group, otherwise, only show connected consumer groups.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaExporterTemplate-reference"><code>KafkaExporterTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Customization of deployment templates and pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness check.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness check.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaExporterTemplate-reference"><a class="link" href="#type-KafkaExporterTemplate-reference">64. <code>KafkaExporterTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaExporterSpec-reference"><code>KafkaExporterSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Exporter <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Exporter <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">service</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>service</code> property has been deprecated.</strong> The Kafka Exporter service has been removed. Template for Kafka Exporter <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">container</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Exporter container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Exporter service account.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaStatus-reference"><a class="link" href="#type-KafkaStatus-reference">65. <code>KafkaStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Kafka-reference"><code>Kafka</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">listeners</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ListenerStatus-reference"><code>ListenerStatus</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Addresses of the internal and external listeners.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaNodePools</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-UsedNodePoolStatus-reference"><code>UsedNodePoolStatus</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of the KafkaNodePools used by this Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusterId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kafka cluster Id.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">operatorLastSuccessfulVersion</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The version of the Strimzi Cluster Operator which performed the last successful reconciliation.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaVersion</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The version of Kafka currently deployed in the cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaMetadataVersion</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The KRaft metadata.version currently used by the Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaMetadataState</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [PreKRaft, ZooKeeper, KRaftMigration, KRaftDualWriting, KRaftPostMigration, KRaft])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Defines where cluster metadata are stored. Possible values are: ZooKeeper if the metadata are stored in ZooKeeper; KRaftMigration if the controllers are connected to ZooKeeper, brokers are being rolled with Zookeeper migration enabled and connection information to controllers, and the metadata migration process is running; KRaftDualWriting if the metadata migration process finished and the cluster is in dual-write mode; KRaftPostMigration if the brokers are fully KRaft-based but controllers being rolled to disconnect from ZooKeeper; PreKRaft if brokers and controller are fully KRaft-based, metadata are stored in KRaft, but ZooKeeper must be deleted; KRaft if the metadata are stored in KRaft.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-Condition-reference"><a class="link" href="#type-Condition-reference">66. <code>Condition</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeStatus-reference"><code>KafkaBridgeStatus</code></a>, <a href="#type-KafkaConnectorStatus-reference"><code>KafkaConnectorStatus</code></a>, <a href="#type-KafkaConnectStatus-reference"><code>KafkaConnectStatus</code></a>, <a href="#type-KafkaMirrorMaker2Status-reference"><code>KafkaMirrorMaker2Status</code></a>, <a href="#type-KafkaMirrorMakerStatus-reference"><code>KafkaMirrorMakerStatus</code></a>, <a href="#type-KafkaNodePoolStatus-reference"><code>KafkaNodePoolStatus</code></a>, <a href="#type-KafkaRebalanceStatus-reference"><code>KafkaRebalanceStatus</code></a>, <a href="#type-KafkaStatus-reference"><code>KafkaStatus</code></a>, <a href="#type-KafkaTopicStatus-reference"><code>KafkaTopicStatus</code></a>, <a href="#type-KafkaUserStatus-reference"><code>KafkaUserStatus</code></a>, <a href="#type-StrimziPodSetStatus-reference"><code>StrimziPodSetStatus</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The unique identifier of a condition, used to distinguish between other conditions in the resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the condition, either True, False or Unknown.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">lastTransitionTime</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Last time the condition of a type changed from one status to another. The required format is 'yyyy-MM-ddTHH:mm:ssZ', in the UTC time zone.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">reason</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The reason for the condition&#8217;s last transition (a single word in CamelCase).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">message</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Human-readable message indicating details about the condition&#8217;s last transition.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ListenerStatus-reference"><a class="link" href="#type-ListenerStatus-reference">67. <code>ListenerStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaStatus-reference"><code>KafkaStatus</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>type</code> property has been deprecated.</strong> The <code>type</code> property is not used anymore. Use the <code>name</code> property with the same value. The name of the listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">addresses</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ListenerAddress-reference"><code>ListenerAddress</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of the addresses for this listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrapServers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A comma-separated list of <code>host:port</code> pairs for connecting to the Kafka cluster using this listener.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">certificates</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of TLS certificates which can be used to verify the identity of the server when connecting to the given listener. Set only for <code>tls</code> and <code>external</code> listeners.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ListenerAddress-reference"><a class="link" href="#type-ListenerAddress-reference">68. <code>ListenerAddress</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ListenerStatus-reference"><code>ListenerStatus</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The DNS name or IP address of the Kafka bootstrap service.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">port</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The port of the Kafka bootstrap service.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-UsedNodePoolStatus-reference"><a class="link" href="#type-UsedNodePoolStatus-reference">69. <code>UsedNodePoolStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaStatus-reference"><code>KafkaStatus</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the KafkaNodePool used by this Kafka resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaConnect-reference"><a class="link" href="#type-KafkaConnect-reference">70. <code>KafkaConnect</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka Connect cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaConnectStatus-reference"><code>KafkaConnectStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the Kafka Connect cluster.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaConnectSpec-reference"><a class="link" href="#type-KafkaConnectSpec-reference">71. <code>KafkaConnectSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnect-reference"><code>KafkaConnect</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaConnectSpec-schema-reference">Full list of <code>KafkaConnectSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a Kafka Connect cluster.</p>
</div>
<div class="sect2">
<h3 id="property-kafka-connect-config-reference"><a class="link" href="#property-kafka-connect-config-reference">71.1. <code>config</code></a></h3>
<div class="paragraph">
<p>Use the <code>config</code> properties to configure Kafka Connect options as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Certain options have default values:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>group.id</code> with default value <code>connect-cluster</code></p>
</li>
<li>
<p><code>offset.storage.topic</code> with default value <code>connect-cluster-offsets</code></p>
</li>
<li>
<p><code>config.storage.topic</code> with default value <code>connect-cluster-configs</code></p>
</li>
<li>
<p><code>status.storage.topic</code> with default value <code>connect-cluster-status</code></p>
</li>
<li>
<p><code>key.converter</code> with default value <code>org.apache.kafka.connect.json.JsonConverter</code></p>
</li>
<li>
<p><code>value.converter</code> with default value <code>org.apache.kafka.connect.json.JsonConverter</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>These options are automatically configured in case they are not present in the <code>KafkaConnect.spec.config</code> properties.</p>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://kafka.apache.org/documentation/#connectconfigs" target="_blank" rel="noopener">Apache Kafka documentation</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kafka cluster bootstrap address</p>
</li>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Listener and REST interface configuration</p>
</li>
<li>
<p>Plugin path configuration</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>bootstrap.servers</code></p>
</li>
<li>
<p><code>consumer.interceptor.classes</code></p>
</li>
<li>
<p><code>listeners.</code></p>
</li>
<li>
<p><code>plugin.path</code></p>
</li>
<li>
<p><code>producer.interceptor.classes</code></p>
</li>
<li>
<p><code>rest.</code></p>
</li>
<li>
<p><code>sasl.</code></p>
</li>
<li>
<p><code>security.</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to Kafka Connect, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example Kafka Connect configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect
spec:
  # ...
  config:
    group.id: my-connect-cluster
    offset.storage.topic: my-connect-cluster-offsets
    config.storage.topic: my-connect-cluster-configs
    status.storage.topic: my-connect-cluster-status
    key.converter: org.apache.kafka.connect.json.JsonConverter
    value.converter: org.apache.kafka.connect.json.JsonConverter
    key.converter.schemas.enable: true
    value.converter.schemas.enable: true
    config.storage.replication.factor: 3
    offset.storage.replication.factor: 3
    status.storage.replication.factor: 3
  # ...</code></pre>
</div>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
The Cluster Operator does not validate keys or values in the <code>config</code> object provided.
If an invalid configuration is provided, the Kafka Connect cluster might not start or might become unstable.
In this case, fix the configuration so that the Cluster Operator can roll out the new configuration to all Kafka Connect nodes.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="property-kafka-connect-logging-reference"><a class="link" href="#property-kafka-connect-logging-reference">71.2. <code>logging</code></a></h3>
<div class="paragraph">
<p>Kafka Connect has its own configurable loggers:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>connect.root.logger.level</code></p>
</li>
<li>
<p><code>log4j.logger.org.reflections</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Further loggers are added depending on the Kafka Connect plugins running.</p>
</div>
<div class="paragraph">
<p>Use a curl request to get a complete list of Kafka Connect loggers running from any Kafka broker pod:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-curl hljs" data-lang="curl">curl -s http://&lt;connect-cluster-name&gt;-connect-api:8083/admin/loggers/</code></pre>
</div>
</div>
<div class="paragraph">
<p>Kafka Connect uses the Apache <code>log4j</code> logger implementation.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration. Inside the ConfigMap, the logging configuration is described using <code>log4j.properties</code>. Both <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory. A ConfigMap using the exact logging configuration specified is created with the custom resource when the Cluster Operator is running, then recreated after each reconciliation. If you do not specify a custom ConfigMap, default logging settings are used. If a specific logger value is not set, upper-level logger settings are inherited for that logger.
For more information about log levels, see <a href="https://logging.apache.org/" target="_blank" rel="noopener">Apache logging services</a>.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.
The <code>inline</code> logging specifies the root logger level.
You can also set log levels for specific classes or loggers by adding them to the loggers property.</p>
</div>
<div class="listingblock">
<div class="title">Inline logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
spec:
  # ...
  logging:
    type: inline
    loggers:
      connect.root.logger.level: INFO
      log4j.logger.org.apache.kafka.connect.runtime.WorkerSourceTask: TRACE
      log4j.logger.org.apache.kafka.connect.runtime.WorkerSinkTask: DEBUG
  # ...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Setting a log level to <code>DEBUG</code> may result in a large amount of log output and may have performance implications.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">External logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
spec:
  # ...
  logging:
    type: external
    valueFrom:
      configMapKeyRef:
        name: customConfigMap
        key: connect-logging.log4j
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>Any available loggers that are not configured have their level set to <code>OFF</code>.</p>
</div>
<div class="paragraph">
<p>If Kafka Connect was deployed using the Cluster Operator,
changes to Kafka Connect logging levels are applied dynamically.</p>
</div>
<div class="paragraph">
<p>If you use external logging, a rolling update is triggered when logging appenders are changed.</p>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaConnectSpec-schema-reference"><a class="link" href="#type-KafkaConnectSpec-schema-reference">71.3. <code>KafkaConnectSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka Connect version. Defaults to the latest version. Consult the user documentation to understand the process required to upgrade or downgrade the version.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of pods in the Kafka Connect group. Defaults to <code>3</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for Kafka Connect pods. If no image name is explicitly specified, it is determined based on the <code>spec.version</code> configuration. The image names are specifically mapped to corresponding versions in the Cluster Operator configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrapServers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Bootstrap servers to connect to. This should be given as a comma separated list of <em>&lt;hostname&gt;</em>:_&lt;port&gt;_ pairs.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ClientTls-reference"><code>ClientTls</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>TLS configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication configuration for Kafka Connect.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka Connect configuration. Properties with the following prefixes cannot be set: ssl., sasl., security., listeners, plugin.path, rest., bootstrap.servers, consumer.interceptor.classes, producer.interceptor.classes (with the exception of: ssl.endpoint.identification.algorithm, ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum limits for CPU and memory resources and the requested initial resources.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaJmxOptions-reference"><code>KafkaJmxOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JMX Options.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration for Kafka Connect.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientRackInitImage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The image of the init container used for initializing the <code>client.rack</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">rack</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Rack-reference"><code>Rack</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the node label which will be used as the <code>client.rack</code> consumer configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tracing</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JaegerTracing-reference"><code>JaegerTracing</code></a>, <a href="#type-OpenTelemetryTracing-reference"><code>OpenTelemetryTracing</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The configuration of tracing in Kafka Connect.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect and Kafka Mirror Maker 2 resources. The template allows users to specify how the <code>Pods</code>, <code>Service</code>, and other services are generated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">externalConfiguration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ExternalConfiguration-reference"><code>ExternalConfiguration</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pass data from Secrets or ConfigMaps to the Kafka Connect pods and use them to configure connectors.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">build</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Build-reference"><code>Build</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures how the Connect container image should be built. Optional.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metricsConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxPrometheusExporterMetrics-reference"><code>JmxPrometheusExporterMetrics</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metrics configuration.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-ClientTls-reference"><a class="link" href="#type-ClientTls-reference">72. <code>ClientTls</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2ClusterSpec-reference"><code>KafkaMirrorMaker2ClusterSpec</code></a>, <a href="#type-KafkaMirrorMakerConsumerSpec-reference"><code>KafkaMirrorMakerConsumerSpec</code></a>, <a href="#type-KafkaMirrorMakerProducerSpec-reference"><code>KafkaMirrorMakerProducerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-ClientTls-schema-reference">Full list of <code>ClientTls</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures TLS trusted certificates for connecting KafkaConnect, KafkaBridge, KafkaMirror, KafkaMirrorMaker2 to the cluster.</p>
</div>
<div class="sect2">
<h3 id="trustedcertificates"><a class="link" href="#trustedcertificates">72.1. <code>trustedCertificates</code></a></h3>
<div class="paragraph">
<p>Provide a list of secrets using the <a href="#con-common-configuration-trusted-certificates-reference"><code>trustedCertificates</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-ClientTls-schema-reference"><a class="link" href="#type-ClientTls-schema-reference">72.2. <code>ClientTls</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">trustedCertificates</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertSecretSource-reference"><code>CertSecretSource</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Trusted certificates for TLS connection.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaClientAuthenticationTls-reference"><a class="link" href="#type-KafkaClientAuthenticationTls-reference">73. <code>KafkaClientAuthenticationTls</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2ClusterSpec-reference"><code>KafkaMirrorMaker2ClusterSpec</code></a>, <a href="#type-KafkaMirrorMakerConsumerSpec-reference"><code>KafkaMirrorMakerConsumerSpec</code></a>, <a href="#type-KafkaMirrorMakerProducerSpec-reference"><code>KafkaMirrorMakerProducerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaClientAuthenticationTls-schema-reference">Full list of <code>KafkaClientAuthenticationTls</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To configure mTLS authentication, set the <code>type</code> property to the value <code>tls</code>.
mTLS uses a TLS certificate to authenticate.</p>
</div>
<div class="sect2">
<h3 id="certificateandkey"><a class="link" href="#certificateandkey">73.1. <code>certificateAndKey</code></a></h3>
<div class="paragraph">
<p>The certificate is specified in the <code>certificateAndKey</code> property and is always loaded from a Kubernetes secret.
In the secret, the certificate must be stored in X509 format under two different keys: public and private.</p>
</div>
<div class="paragraph">
<p>You can use the secrets created by the User Operator,
or you can create your own TLS certificate file, with the keys used for authentication, then create a <code>Secret</code> from the file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">kubectl create secret generic <em>MY-SECRET</em> \
--from-file=<em>MY-PUBLIC-TLS-CERTIFICATE-FILE.crt</em> \
--from-file=<em>MY-PRIVATE.key</em></code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
mTLS authentication can only be used with TLS connections.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">Example mTLS configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: tls
  certificateAndKey:
    secretName: my-secret
    certificate: my-public-tls-certificate-file.crt
    key: private.key</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaClientAuthenticationTls-schema-reference"><a class="link" href="#type-KafkaClientAuthenticationTls-schema-reference">73.2. <code>KafkaClientAuthenticationTls</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaClientAuthenticationTls</code> type from <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a>.
It must have the value <code>tls</code> for the type <code>KafkaClientAuthenticationTls</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">certificateAndKey</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertAndKeySecretSource-reference"><code>CertAndKeySecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to the <code>Secret</code> which holds the certificate and private key pair.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>tls</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaClientAuthenticationScramSha256-reference"><a class="link" href="#type-KafkaClientAuthenticationScramSha256-reference">74. <code>KafkaClientAuthenticationScramSha256</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2ClusterSpec-reference"><code>KafkaMirrorMaker2ClusterSpec</code></a>, <a href="#type-KafkaMirrorMakerConsumerSpec-reference"><code>KafkaMirrorMakerConsumerSpec</code></a>, <a href="#type-KafkaMirrorMakerProducerSpec-reference"><code>KafkaMirrorMakerProducerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaClientAuthenticationScramSha256-schema-reference">Full list of <code>KafkaClientAuthenticationScramSha256</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To configure SASL-based SCRAM-SHA-256 authentication, set the <code>type</code> property to <code>scram-sha-256</code>.
The SCRAM-SHA-256 authentication mechanism requires a username and password.</p>
</div>
<div class="sect2">
<h3 id="username"><a class="link" href="#username">74.1. <code>username</code></a></h3>
<div class="paragraph">
<p>Specify the username in the <code>username</code> property.</p>
</div>
</div>
<div class="sect2">
<h3 id="passwordsecret"><a class="link" href="#passwordsecret">74.2. <code>passwordSecret</code></a></h3>
<div class="paragraph">
<p>In the <code>passwordSecret</code> property, specify a link to a <code>Secret</code> containing the password.</p>
</div>
<div class="paragraph">
<p>You can use the secrets created by the User Operator.</p>
</div>
<div class="paragraph">
<p>If required, you can create a text file that contains the password, in cleartext, to use for authentication:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">echo -n <em>PASSWORD</em> &gt; <em>MY-PASSWORD</em>.txt</code></pre>
</div>
</div>
<div class="paragraph">
<p>You can then create a <code>Secret</code> from the text file, setting your own field name (key) for the password:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">kubectl create secret generic <em>MY-CONNECT-SECRET-NAME</em> --from-file=<em>MY-PASSWORD-FIELD-NAME</em>=./<em>MY-PASSWORD</em>.txt</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Example Secret for SCRAM-SHA-256 client authentication for Kafka Connect</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: v1
kind: Secret
metadata:
  name: my-connect-secret-name
type: Opaque
data:
  my-connect-password-field: LFTIyFRFlMmU2N2Tm</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>secretName</code> property contains the name of the <code>Secret</code>, and the <code>password</code> property contains the name of the key under which the password is stored inside the <code>Secret</code>.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
Do not specify the actual password in the <code>password</code> property.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">Example SASL-based SCRAM-SHA-256 client authentication configuration for Kafka Connect</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: scram-sha-256
  username: my-connect-username
  passwordSecret:
    secretName: my-connect-secret-name
    password: my-connect-password-field</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaClientAuthenticationScramSha256-schema-reference"><a class="link" href="#type-KafkaClientAuthenticationScramSha256-schema-reference">74.3. <code>KafkaClientAuthenticationScramSha256</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">passwordSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PasswordSecretSource-reference"><code>PasswordSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to the <code>Secret</code> which holds the password.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>scram-sha-256</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">username</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Username used for the authentication.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-PasswordSecretSource-reference"><a class="link" href="#type-PasswordSecretSource-reference">75. <code>PasswordSecretSource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">password</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the key in the Secret under which the password is stored.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secretName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the Secret containing the password.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaClientAuthenticationScramSha512-reference"><a class="link" href="#type-KafkaClientAuthenticationScramSha512-reference">76. <code>KafkaClientAuthenticationScramSha512</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2ClusterSpec-reference"><code>KafkaMirrorMaker2ClusterSpec</code></a>, <a href="#type-KafkaMirrorMakerConsumerSpec-reference"><code>KafkaMirrorMakerConsumerSpec</code></a>, <a href="#type-KafkaMirrorMakerProducerSpec-reference"><code>KafkaMirrorMakerProducerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaClientAuthenticationScramSha512-schema-reference">Full list of <code>KafkaClientAuthenticationScramSha512</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To configure SASL-based SCRAM-SHA-512 authentication, set the <code>type</code> property to <code>scram-sha-512</code>.
The SCRAM-SHA-512 authentication mechanism requires a username and password.</p>
</div>
<div class="sect2">
<h3 id="username_2"><a class="link" href="#username_2">76.1. <code>username</code></a></h3>
<div class="paragraph">
<p>Specify the username in the <code>username</code> property.</p>
</div>
</div>
<div class="sect2">
<h3 id="passwordsecret_2"><a class="link" href="#passwordsecret_2">76.2. <code>passwordSecret</code></a></h3>
<div class="paragraph">
<p>In the <code>passwordSecret</code> property, specify a link to a <code>Secret</code> containing the password.</p>
</div>
<div class="paragraph">
<p>You can use the secrets created by the User Operator.</p>
</div>
<div class="paragraph">
<p>If required, you can create a text file that contains the password, in cleartext, to use for authentication:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">echo -n <em>PASSWORD</em> &gt; <em>MY-PASSWORD</em>.txt</code></pre>
</div>
</div>
<div class="paragraph">
<p>You can then create a <code>Secret</code> from the text file, setting your own field name (key) for the password:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">kubectl create secret generic <em>MY-CONNECT-SECRET-NAME</em> --from-file=<em>MY-PASSWORD-FIELD-NAME</em>=./<em>MY-PASSWORD</em>.txt</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Example Secret for SCRAM-SHA-512 client authentication for Kafka Connect</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: v1
kind: Secret
metadata:
  name: my-connect-secret-name
type: Opaque
data:
  my-connect-password-field: LFTIyFRFlMmU2N2Tm</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>secretName</code> property contains the name of the <code>Secret</code>, and the <code>password</code> property contains the name of the key under which the password is stored inside the <code>Secret</code>.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
Do not specify the actual password in the <code>password</code> property.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">Example SASL-based SCRAM-SHA-512 client authentication configuration for Kafka Connect</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: scram-sha-512
  username: my-connect-username
  passwordSecret:
    secretName: my-connect-secret-name
    password: my-connect-password-field</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaClientAuthenticationScramSha512-schema-reference"><a class="link" href="#type-KafkaClientAuthenticationScramSha512-schema-reference">76.3. <code>KafkaClientAuthenticationScramSha512</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">passwordSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PasswordSecretSource-reference"><code>PasswordSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to the <code>Secret</code> which holds the password.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>scram-sha-512</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">username</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Username used for the authentication.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaClientAuthenticationPlain-reference"><a class="link" href="#type-KafkaClientAuthenticationPlain-reference">77. <code>KafkaClientAuthenticationPlain</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2ClusterSpec-reference"><code>KafkaMirrorMaker2ClusterSpec</code></a>, <a href="#type-KafkaMirrorMakerConsumerSpec-reference"><code>KafkaMirrorMakerConsumerSpec</code></a>, <a href="#type-KafkaMirrorMakerProducerSpec-reference"><code>KafkaMirrorMakerProducerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaClientAuthenticationPlain-schema-reference">Full list of <code>KafkaClientAuthenticationPlain</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To configure SASL-based PLAIN authentication, set the <code>type</code> property to <code>plain</code>.
SASL PLAIN authentication mechanism requires a username and password.</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">
The SASL PLAIN mechanism will transfer the username and password across the network in cleartext.
Only use SASL PLAIN authentication if TLS encryption is enabled.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="username_3"><a class="link" href="#username_3">77.1. <code>username</code></a></h3>
<div class="paragraph">
<p>Specify the username in the <code>username</code> property.</p>
</div>
</div>
<div class="sect2">
<h3 id="passwordsecret_3"><a class="link" href="#passwordsecret_3">77.2. <code>passwordSecret</code></a></h3>
<div class="paragraph">
<p>In the <code>passwordSecret</code> property, specify a link to a <code>Secret</code> containing the password.</p>
</div>
<div class="paragraph">
<p>You can use the secrets created by the User Operator.</p>
</div>
<div class="paragraph">
<p>If required, create a text file that contains the password, in cleartext, to use for authentication:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">echo -n <em>PASSWORD</em> &gt; <em>MY-PASSWORD</em>.txt</code></pre>
</div>
</div>
<div class="paragraph">
<p>You can then create a <code>Secret</code> from the text file, setting your own field name (key) for the password:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">kubectl create secret generic <em>MY-CONNECT-SECRET-NAME</em> --from-file=<em>MY-PASSWORD-FIELD-NAME</em>=./<em>MY-PASSWORD</em>.txt</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Example Secret for PLAIN client authentication for Kafka Connect</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: v1
kind: Secret
metadata:
  name: my-connect-secret-name
type: Opaque
data:
  my-password-field-name: LFTIyFRFlMmU2N2Tm</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>secretName</code> property contains the name of the <code>Secret</code> and the <code>password</code> property contains the name of the key under which the password is stored inside the <code>Secret</code>.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
Do not specify the actual password in the <code>password</code> property.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">An example SASL based PLAIN client authentication configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: plain
  username: my-connect-username
  passwordSecret:
    secretName: my-connect-secret-name
    password: my-password-field-name</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaClientAuthenticationPlain-schema-reference"><a class="link" href="#type-KafkaClientAuthenticationPlain-schema-reference">77.3. <code>KafkaClientAuthenticationPlain</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaClientAuthenticationPlain</code> type from <a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a>.
It must have the value <code>plain</code> for the type <code>KafkaClientAuthenticationPlain</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">passwordSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PasswordSecretSource-reference"><code>PasswordSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to the <code>Secret</code> which holds the password.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>plain</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">username</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Username used for the authentication.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaClientAuthenticationOAuth-reference"><a class="link" href="#type-KafkaClientAuthenticationOAuth-reference">78. <code>KafkaClientAuthenticationOAuth</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2ClusterSpec-reference"><code>KafkaMirrorMaker2ClusterSpec</code></a>, <a href="#type-KafkaMirrorMakerConsumerSpec-reference"><code>KafkaMirrorMakerConsumerSpec</code></a>, <a href="#type-KafkaMirrorMakerProducerSpec-reference"><code>KafkaMirrorMakerProducerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaClientAuthenticationOAuth-schema-reference">Full list of <code>KafkaClientAuthenticationOAuth</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>To configure OAuth client authentication, set the <code>type</code> property to <code>oauth</code>.</p>
</div>
<div class="paragraph">
<p>OAuth authentication can be configured using one of the following options:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Client ID and secret</p>
</li>
<li>
<p>Client ID and refresh token</p>
</li>
<li>
<p>Access token</p>
</li>
<li>
<p>Username and password</p>
</li>
<li>
<p>TLS</p>
</li>
</ul>
</div>
<div class="paragraph">
<div class="title">Client ID and secret</div>
<p>You can configure the address of your authorization server in the <code>tokenEndpointUri</code> property together with the client ID and client secret used in authentication.
The OAuth client will connect to the OAuth server, authenticate using the client ID and secret and get an access token which it will use to authenticate with the Kafka broker.
In the <code>clientSecret</code> property, specify a link to a <code>Secret</code> containing the client secret.</p>
</div>
<div class="listingblock">
<div class="title">An example of OAuth client authentication using client ID and client secret</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: oauth
  tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
  clientId: my-client-id
  clientSecret:
    secretName: my-client-oauth-secret
    key: client-secret</code></pre>
</div>
</div>
<div class="paragraph">
<p>Optionally, <code>scope</code> and <code>audience</code> can be specified if needed.</p>
</div>
<div class="paragraph">
<div class="title">Client ID and refresh token</div>
<p>You can configure the address of your OAuth server in the <code>tokenEndpointUri</code> property together with the OAuth client ID and refresh token.
The OAuth client will connect to the OAuth server, authenticate using the client ID and refresh token and get an access token which it will use to authenticate with the Kafka broker.
In the <code>refreshToken</code> property, specify a link to a <code>Secret</code> containing the refresh token.</p>
</div>
<div class="listingblock">
<div class="title">An example of OAuth client authentication using client ID and refresh token</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: oauth
  tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
  clientId: my-client-id
  refreshToken:
    secretName: my-refresh-token-secret
    key: refresh-token</code></pre>
</div>
</div>
<div class="paragraph">
<div class="title">Access token</div>
<p>You can configure the access token used for authentication with the Kafka broker directly.
In this case, you do not specify the <code>tokenEndpointUri</code>.
In the <code>accessToken</code> property, specify a link to a <code>Secret</code> containing the access token.</p>
</div>
<div class="listingblock">
<div class="title">An example of OAuth client authentication using only an access token</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: oauth
  accessToken:
    secretName: my-access-token-secret
    key: access-token</code></pre>
</div>
</div>
<div class="paragraph">
<div class="title">Username and password</div>
<p>OAuth username and password configuration uses the OAuth <em>Resource Owner Password Grant</em> mechanism. The mechanism is deprecated, and is only supported to enable integration in environments where client credentials (ID and secret) cannot be used. You might need to use user accounts if your access management system does not support another approach or user accounts are required for authentication.</p>
</div>
<div class="paragraph">
<p>A typical approach is to create a special user account in your authorization server that represents your client application. You then give the account a long randomly generated password and a very limited set of permissions. For example, the account can only connect to your Kafka cluster, but is not allowed to use any other services or login to the user interface.</p>
</div>
<div class="paragraph">
<p>Consider using a refresh token mechanism first.</p>
</div>
<div class="paragraph">
<p>You can configure the address of your authorization server in the <code>tokenEndpointUri</code> property together with the client ID, username and the password used in authentication.
The OAuth client will connect to the OAuth server, authenticate using the username, the password, the client ID, and optionally even the client secret to obtain an access token which it will use to authenticate with the Kafka broker.</p>
</div>
<div class="paragraph">
<p>In the <code>passwordSecret</code> property, specify a link to a <code>Secret</code> containing the password.</p>
</div>
<div class="paragraph">
<p>Normally, you also have to configure a <code>clientId</code> using a public OAuth client.
If you are using a confidential OAuth client, you also have to configure a <code>clientSecret</code>.</p>
</div>
<div class="listingblock">
<div class="title">An example of OAuth client authentication using username and a password with a public client</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: oauth
  tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
  username: my-username
  passwordSecret:
    secretName: my-password-secret-name
    password: my-password-field-name
  clientId: my-public-client-id</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">An example of OAuth client authentication using a username and a password with a confidential client</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: oauth
  tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
  username: my-username
  passwordSecret:
    secretName: my-password-secret-name
    password: my-password-field-name
  clientId: my-confidential-client-id
  clientSecret:
    secretName: my-confidential-client-oauth-secret
    key: client-secret</code></pre>
</div>
</div>
<div class="paragraph">
<p>Optionally, <code>scope</code> and <code>audience</code> can be specified if needed.</p>
</div>
<div class="paragraph">
<div class="title">TLS</div>
<p>Accessing the OAuth server using the HTTPS protocol does not require any additional configuration as long as the TLS certificates used by it are signed by a trusted certification authority and its hostname is listed in the certificate.</p>
</div>
<div class="paragraph">
<p>If your OAuth server is using certificates which are self-signed or are signed by a certification authority which is not trusted, you can configure a list of trusted certificates in the custom resource.
The <code>tlsTrustedCertificates</code> property contains a list of secrets with key names under which the certificates are stored.
The certificates must be stored in X509 format.</p>
</div>
<div class="listingblock">
<div class="title">An example of TLS certificates provided</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: oauth
  tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
  clientId: my-client-id
  refreshToken:
    secretName: my-refresh-token-secret
    key: refresh-token
  tlsTrustedCertificates:
    - secretName: oauth-server-ca
      certificate: tls.crt</code></pre>
</div>
</div>
<div class="paragraph">
<p>The OAuth client will by default verify that the hostname of your OAuth server matches either the certificate subject or one of the alternative DNS names.
If it is not required, you can disable the hostname verification.</p>
</div>
<div class="listingblock">
<div class="title">An example of disabled TLS hostname verification</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">authentication:
  type: oauth
  tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
  clientId: my-client-id
  refreshToken:
    secretName: my-refresh-token-secret
    key: refresh-token
  disableTlsHostnameVerification: true</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaClientAuthenticationOAuth-schema-reference"><a class="link" href="#type-KafkaClientAuthenticationOAuth-schema-reference">78.1. <code>KafkaClientAuthenticationOAuth</code> schema properties</a></h3>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaClientAuthenticationOAuth</code> type from <a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>.
It must have the value <code>oauth</code> for the type <code>KafkaClientAuthenticationOAuth</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">accessToken</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericSecretSource-reference"><code>GenericSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Link to Kubernetes Secret containing the access token which was obtained from the authorization server.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">accessTokenIsJwt</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configure whether access token should be treated as JWT. This should be set to <code>false</code> if the authorization server returns opaque tokens. Defaults to <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">audience</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>OAuth audience to use when authenticating against the authorization server. Some authorization servers require the audience to be explicitly set. The possible values depend on how the authorization server is configured. By default, <code>audience</code> is not specified when performing the token endpoint request.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>OAuth Client ID which the Kafka client can use to authenticate against the OAuth server and use the token endpoint URI.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericSecretSource-reference"><code>GenericSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Link to Kubernetes Secret containing the OAuth client secret which the Kafka client can use to authenticate against the OAuth server and use the token endpoint URI.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The connect timeout in seconds when connecting to authorization server. If not set, the effective connect timeout is 60 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">disableTlsHostnameVerification</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable TLS hostname verification. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableMetrics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable or disable OAuth metrics. Default value is <code>false</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">httpRetries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of retries to attempt if an initial HTTP request fails. If not set, the default is to not attempt any retries.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">httpRetryPauseMs</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The pause to take before retrying a failed HTTP request. If not set, the default is to not pause at all but to immediately repeat a request.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">includeAcceptHeader</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether the Accept header should be set in requests to the authorization servers. The default value is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maxTokenExpirySeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Set or limit time-to-live of the access tokens to the specified number of seconds. This should be set if the authorization server returns opaque tokens.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">passwordSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PasswordSecretSource-reference"><code>PasswordSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to the <code>Secret</code> which holds the password.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readTimeoutSeconds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The read timeout in seconds when connecting to authorization server. If not set, the effective read timeout is 60 seconds.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">refreshToken</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-GenericSecretSource-reference"><code>GenericSecretSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Link to Kubernetes Secret containing the refresh token which can be used to obtain access token from the authorization server.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">scope</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>OAuth scope to use when authenticating against the authorization server. Some authorization servers require this to be set. The possible values depend on how authorization server is configured. By default <code>scope</code> is not specified when doing the token endpoint request.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tlsTrustedCertificates</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-CertSecretSource-reference"><code>CertSecretSource</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Trusted certificates for TLS connection to the OAuth server.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tokenEndpointUri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authorization server token endpoint URI.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>oauth</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">username</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Username used for the authentication.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-JaegerTracing-reference"><a class="link" href="#type-JaegerTracing-reference">79. <code>JaegerTracing</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p><strong>The type <code>JaegerTracing</code> has been deprecated.</strong></p>
</div>
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>JaegerTracing</code> type from <a href="#type-OpenTelemetryTracing-reference"><code>OpenTelemetryTracing</code></a>.
It must have the value <code>jaeger</code> for the type <code>JaegerTracing</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>jaeger</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-OpenTelemetryTracing-reference"><a class="link" href="#type-OpenTelemetryTracing-reference">80. <code>OpenTelemetryTracing</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a>, <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a>, <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>OpenTelemetryTracing</code> type from <a href="#type-JaegerTracing-reference"><code>JaegerTracing</code></a>.
It must have the value <code>opentelemetry</code> for the type <code>OpenTelemetryTracing</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>opentelemetry</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaConnectTemplate-reference"><a class="link" href="#type-KafkaConnectTemplate-reference">81. <code>KafkaConnectTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>deployment</code> property has been deprecated.</strong> Kafka Connect and MirrorMaker 2 operands do not use <code>Deployment</code> resources anymore. This field will be ignored. Template for Kafka Connect <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podSet</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect <code>StrimziPodSet</code> resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">apiService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect API <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">headlessService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect headless <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Connect container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">initContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka init container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podDisruptionBudget</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodDisruptionBudgetTemplate-reference"><code>PodDisruptionBudgetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect <code>PodDisruptionBudget</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Connect service account.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusterRoleBinding</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Connect ClusterRoleBinding.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">buildPod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect Build <code>Pods</code>. The build pod is used only on Kubernetes.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">buildContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Connect Build container. The build container is used only on Kubernetes.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">buildConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-BuildConfigTemplate-reference"><code>BuildConfigTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Connect BuildConfig used to build new container images. The BuildConfig is used only on OpenShift.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">buildServiceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Connect Build service account.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Secret of the Kafka Connect Cluster JMX authentication.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-BuildConfigTemplate-reference"><a class="link" href="#type-BuildConfigTemplate-reference">82. <code>BuildConfigTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metadata</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-MetadataTemplate-reference"><code>MetadataTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metadata to apply to the <code>PodDisruptionBudgetTemplate</code> resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pullSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Container Registry Secret with the credentials for pulling the base image.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ExternalConfiguration-reference"><a class="link" href="#type-ExternalConfiguration-reference">83. <code>ExternalConfiguration</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a>, <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-ExternalConfiguration-schema-reference">Full list of <code>ExternalConfiguration</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures external storage properties that define configuration options for Kafka Connect connectors.</p>
</div>
<div class="paragraph">
<p>You can mount ConfigMaps or Secrets into a Kafka Connect pod as environment variables or volumes.
Volumes and environment variables are configured in the <code>externalConfiguration</code> property in <code>KafkaConnect.spec</code> or <code>KafkaMirrorMaker2.spec</code>.</p>
</div>
<div class="paragraph">
<p>When applied, the environment variables and volumes are available for use when developing your connectors.</p>
</div>
<div class="paragraph">
<p>For more information, see <a href="./deploying.html#assembly-loading-config-with-providers-str" target="_blank" rel="noopener">Loading configuration values from external sources</a>.</p>
</div>
<div class="sect2">
<h3 id="type-ExternalConfiguration-schema-reference"><a class="link" href="#type-ExternalConfiguration-schema-reference">83.1. <code>ExternalConfiguration</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">env</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ExternalConfigurationEnv-reference"><code>ExternalConfigurationEnv</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Makes data from a Secret or ConfigMap available in the Kafka Connect pods as environment variables.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">volumes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ExternalConfigurationVolumeSource-reference"><code>ExternalConfigurationVolumeSource</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Makes data from a Secret or ConfigMap available in the Kafka Connect pods as volumes.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-ExternalConfigurationEnv-reference"><a class="link" href="#type-ExternalConfigurationEnv-reference">84. <code>ExternalConfigurationEnv</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ExternalConfiguration-reference"><code>ExternalConfiguration</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name of the environment variable which will be passed to the Kafka Connect pods. The name of the environment variable cannot start with <code>KAFKA_</code> or <code>STRIMZI_</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">valueFrom</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ExternalConfigurationEnvVarSource-reference"><code>ExternalConfigurationEnvVarSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Value of the environment variable which will be passed to the Kafka Connect pods. It can be passed either as a reference to Secret or ConfigMap field. The field has to specify exactly one Secret or ConfigMap.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ExternalConfigurationEnvVarSource-reference"><a class="link" href="#type-ExternalConfigurationEnvVarSource-reference">85. <code>ExternalConfigurationEnvVarSource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ExternalConfigurationEnv-reference"><code>ExternalConfigurationEnv</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configMapKeyRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#configmapkeyselector-v1-core">ConfigMapKeySelector</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to a key in a ConfigMap.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secretKeyRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#secretkeyselector-v1-core">SecretKeySelector</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to a key in a Secret.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ExternalConfigurationVolumeSource-reference"><a class="link" href="#type-ExternalConfigurationVolumeSource-reference">86. <code>ExternalConfigurationVolumeSource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-ExternalConfiguration-reference"><code>ExternalConfiguration</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#configmapvolumesource-v1-core">ConfigMapVolumeSource</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to a key in a ConfigMap. Exactly one Secret or ConfigMap has to be specified.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name of the volume which will be added to the Kafka Connect pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#secretvolumesource-v1-core">SecretVolumeSource</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Reference to a key in a Secret. Exactly one Secret or ConfigMap has to be specified.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-Build-reference"><a class="link" href="#type-Build-reference">87. <code>Build</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnectSpec-reference"><code>KafkaConnectSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-Build-schema-reference">Full list of <code>Build</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures additional connectors for Kafka Connect deployments.</p>
</div>
<div class="sect2">
<h3 id="output"><a class="link" href="#output">87.1. <code>output</code></a></h3>
<div class="paragraph">
<p>To build new container images with additional connector plugins, Strimzi requires a container registry where the images can be pushed to, stored, and pulled from.
Strimzi does not run its own container registry, so a registry must be provided.
Strimzi supports private container registries as well as public registries such as <a href="https://quay.io/" target="_blank" rel="noopener">Quay</a> or <a href="https://hub.docker.com//" target="_blank" rel="noopener">Docker Hub</a>.
The container registry is configured in the <code>.spec.build.output</code> section of the <code>KafkaConnect</code> custom resource.
The <code>output</code> configuration, which is required, supports two types: <code>docker</code> and <code>imagestream</code>.</p>
</div>
<div class="paragraph">
<div class="title">Using Docker registry</div>
<p>To use a Docker registry, you have to specify the <code>type</code> as <code>docker</code>, and the <code>image</code> field with the full name of the new container image.
The full name must include:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The address of the registry</p>
</li>
<li>
<p>Port number (if listening on a non-standard port)</p>
</li>
<li>
<p>The tag of the new container image</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Example valid container image names:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>docker.io/my-org/my-image/my-tag</code></p>
</li>
<li>
<p><code>quay.io/my-org/my-image/my-tag</code></p>
</li>
<li>
<p><code>image-registry.image-registry.svc:5000/myproject/kafka-connect-build:latest</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Each Kafka Connect deployment must use a separate image, which can mean different tags at the most basic level.</p>
</div>
<div class="paragraph">
<p>If the registry requires authentication, use the <code>pushSecret</code> to set a name of the Secret with the registry credentials.
For the Secret, use the <code>kubernetes.io/dockerconfigjson</code> type and a <code>.dockerconfigjson</code> file to contain the Docker credentials.
For more information on pulling an image from a private registry, see <a href="https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials" target="_blank" rel="noopener">Create a Secret based on existing Docker credentials</a>.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>output</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
spec:
  #...
  build:
    output:
      type: docker # <b class="conum">(1)</b>
      image: my-registry.io/my-org/my-connect-cluster:latest # <b class="conum">(2)</b>
      pushSecret: my-registry-credentials # <b class="conum">(3)</b>
  #...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>(Required) Type of output used by Strimzi.</p>
</li>
<li>
<p>(Required) Full name of the image used, including the repository and tag.</p>
</li>
<li>
<p>(Optional) Name of the secret with the container registry credentials.</p>
</li>
</ol>
</div>
<div class="paragraph">
<div class="title">Using OpenShift ImageStream</div>
<p>Instead of Docker, you can use OpenShift ImageStream to store a new container image.
The ImageStream has to be created manually before deploying Kafka Connect.
To use ImageStream, set the <code>type</code> to <code>imagestream</code>, and use the <code>image</code> property to specify the name of the ImageStream and the tag used.
For example, <code>my-connect-image-stream:latest</code>.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>output</code> configuration</div>
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
spec:
  #...
  build:
    output:
      type: imagestream # <b class="conum">(1)</b>
      image: my-connect-build:latest # <b class="conum">(2)</b>
  #...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>(Required) Type of output used by Strimzi.</p>
</li>
<li>
<p>(Required) Name of the ImageStream and tag.</p>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="plugins"><a class="link" href="#plugins">87.2. <code>plugins</code></a></h3>
<div class="paragraph">
<p>Connector plugins are a set of files that define the implementation required to connect to certain types of external system.
The connector plugins required for a container image must be configured using the <code>.spec.build.plugins</code> property of the <code>KafkaConnect</code> custom resource.
Each connector plugin must have a name which is unique within the Kafka Connect deployment.
Additionally, the plugin artifacts must be listed.
These artifacts are downloaded by Strimzi, added to the new container image, and used in the Kafka Connect deployment.
The connector plugin artifacts can also include additional components, such as (de)serializers.
Each connector plugin is downloaded into a separate directory so that the different connectors and their dependencies are properly <em>sandboxed</em>.
Each plugin must be configured with at least one <code>artifact</code>.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>plugins</code> configuration with two connector plugins</div>
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
spec:
  #...
  build:
    output:
      #...
    plugins: # <b class="conum">(1)</b>
      - name: connector-1
        artifacts:
          - type: tgz
            url: &lt;url_to_download_connector_1_artifact&gt;
            sha512sum: &lt;SHA-512_checksum_of_connector_1_artifact&gt;
      - name: connector-2
        artifacts:
          - type: jar
            url: &lt;url_to_download_connector_2_artifact&gt;
            sha512sum: &lt;SHA-512_checksum_of_connector_2_artifact&gt;
  #...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>(Required) List of connector plugins and their artifacts.</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>Strimzi supports the following types of artifacts:</p>
</div>
<div class="openblock">
<div class="content">
<div class="ulist">
<ul>
<li>
<p>JAR files, which are downloaded and used directly</p>
</li>
<li>
<p>TGZ archives, which are downloaded and unpacked</p>
</li>
<li>
<p>ZIP archives, which are downloaded and unpacked</p>
</li>
<li>
<p>Maven artifacts, which uses Maven coordinates</p>
</li>
<li>
<p>Other artifacts, which are downloaded and used directly</p>
</li>
</ul>
</div>
</div>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
Strimzi does not perform any security scanning of the downloaded artifacts.
For security reasons, you should first verify the artifacts manually, and configure the checksum verification to make sure the same artifact is used in the automated build and in the Kafka Connect deployment.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<div class="title">Using JAR artifacts</div>
<p>JAR artifacts represent a JAR file that is downloaded and added to a container image.
To use a JAR artifacts, set the <code>type</code> property to <code>jar</code>, and specify the download location using the <code>url</code> property.</p>
</div>
<div class="paragraph">
<p>Additionally, you can specify a SHA-512 checksum of the artifact.
If specified, Strimzi will verify the checksum of the artifact while building the new container image.</p>
</div>
<div class="listingblock">
<div class="title">Example JAR artifact</div>
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
spec:
  #...
  build:
    output:
      #...
    plugins:
      - name: my-plugin
        artifacts:
          - type: jar # <b class="conum">(1)</b>
            url: https://my-domain.tld/my-jar.jar # <b class="conum">(2)</b>
            sha512sum: 589...ab4 # <b class="conum">(3)</b>
          - type: jar
            url: https://my-domain.tld/my-jar2.jar
  #...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>(Required) Type of artifact.</p>
</li>
<li>
<p>(Required) URL from which the artifact is downloaded.</p>
</li>
<li>
<p>(Optional) SHA-512 checksum to verify the artifact.</p>
</li>
</ol>
</div>
<div class="paragraph">
<div class="title">Using TGZ artifacts</div>
<p>TGZ artifacts are used to download TAR archives that have been compressed using Gzip compression.
The TGZ artifact can contain the whole Kafka Connect connector, even when comprising multiple different files.
The TGZ artifact is automatically downloaded and unpacked by Strimzi while building the new container image.
To use TGZ artifacts, set the <code>type</code> property to <code>tgz</code>, and specify the download location using the <code>url</code> property.</p>
</div>
<div class="paragraph">
<p>Additionally, you can specify a SHA-512 checksum of the artifact.
If specified, Strimzi will verify the checksum before unpacking it and building the new container image.</p>
</div>
<div class="listingblock">
<div class="title">Example TGZ artifact</div>
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
spec:
  #...
  build:
    output:
      #...
    plugins:
      - name: my-plugin
        artifacts:
          - type: tgz # <b class="conum">(1)</b>
            url: https://my-domain.tld/my-connector-archive.tgz # <b class="conum">(2)</b>
            sha512sum: 158...jg10 # <b class="conum">(3)</b>
  #...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>(Required) Type of artifact.</p>
</li>
<li>
<p>(Required) URL from which the archive is downloaded.</p>
</li>
<li>
<p>(Optional) SHA-512 checksum to verify the artifact.</p>
</li>
</ol>
</div>
<div class="paragraph">
<div class="title">Using ZIP artifacts</div>
<p>ZIP artifacts are used to download ZIP compressed archives.
Use ZIP artifacts in the same way as the TGZ artifacts described in the previous section.
The only difference is you specify <code>type: zip</code> instead of  <code>type: tgz</code>.</p>
</div>
<div class="paragraph">
<div class="title">Using Maven artifacts</div>
<p><code>maven</code> artifacts are used to specify connector plugin artifacts as Maven coordinates.
The Maven coordinates identify plugin artifacts and dependencies so that they can be located and fetched from a Maven repository.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The Maven repository must be accessible for the connector build process to add the artifacts to the container image.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="title">Example Maven artifact</div>
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
spec:
  #...
  build:
    output:
      #...
    plugins:
      - name: my-plugin
        artifacts:
          - type: maven # <b class="conum">(1)</b>
            repository: https://mvnrepository.com # <b class="conum">(2)</b>
            group: &lt;maven_group&gt; # <b class="conum">(3)</b>
            artifact: &lt;maven_artifact&gt; # <b class="conum">(4)</b>
            version:  &lt;maven_version_number&gt; # <b class="conum">(5)</b>
  #...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>(Required) Type of artifact.</p>
</li>
<li>
<p>(Optional) Maven repository to download the artifacts from. If you do not specify a repository, <a href="https://mvnrepository.com/repos/central" target="_blank" rel="noopener">Maven Central repository</a> is used by default.</p>
</li>
<li>
<p>(Required) Maven group ID.</p>
</li>
<li>
<p>(Required) Maven artifact type.</p>
</li>
<li>
<p>(Required) Maven version number.</p>
</li>
</ol>
</div>
<div class="paragraph">
<div class="title">Using <code>other</code> artifacts</div>
<p><code>other</code> artifacts represent any kind of file that is downloaded and added to a container image.
If you want to use a specific name for the artifact in the resulting container image, use the <code>fileName</code> field.
If a file name is not specified, the file is named based on the URL hash.</p>
</div>
<div class="paragraph">
<p>Additionally, you can specify a SHA-512 checksum of the artifact.
If specified, Strimzi will verify the checksum of the artifact while building the new container image.</p>
</div>
<div class="listingblock">
<div class="title">Example <code>other</code> artifact</div>
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
spec:
  #...
  build:
    output:
      #...
    plugins:
      - name: my-plugin
        artifacts:
          - type: other  # <b class="conum">(1)</b>
            url: https://my-domain.tld/my-other-file.ext  # <b class="conum">(2)</b>
            sha512sum: 589...ab4  # <b class="conum">(3)</b>
            fileName: name-the-file.ext  # <b class="conum">(4)</b>
  #...</code></pre>
</div>
</div>
<div class="colist arabic">
<ol>
<li>
<p>(Required) Type of artifact.</p>
</li>
<li>
<p>(Required) URL from which the artifact is downloaded.</p>
</li>
<li>
<p>(Optional) SHA-512 checksum to verify the artifact.</p>
</li>
<li>
<p>(Optional) The name under which the file is stored in the resulting container image.</p>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="type-Build-schema-reference"><a class="link" href="#type-Build-schema-reference">87.3. <code>Build</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">output</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DockerOutput-reference"><code>DockerOutput</code></a>, <a href="#type-ImageStreamOutput-reference"><code>ImageStreamOutput</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures where should the newly built image be stored. Required.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve for the build.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">plugins</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Plugin-reference"><code>Plugin</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of connector plugins which should be added to the Kafka Connect. Required.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-DockerOutput-reference"><a class="link" href="#type-DockerOutput-reference">88. <code>DockerOutput</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Build-reference"><code>Build</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>DockerOutput</code> type from <a href="#type-ImageStreamOutput-reference"><code>ImageStreamOutput</code></a>.
It must have the value <code>docker</code> for the type <code>DockerOutput</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The full name which should be used for tagging and pushing the newly built image. For example <code>quay.io/my-organization/my-custom-connect:latest</code>. Required.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pushSecret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Container Registry Secret with the credentials for pushing the newly built image.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">additionalKanikoOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configures additional options which will be passed to the Kaniko executor when building the new Connect image. Allowed options are: --customPlatform, --insecure, --insecure-pull, --insecure-registry, --log-format, --log-timestamp, --registry-mirror, --reproducible, --single-snapshot, --skip-tls-verify, --skip-tls-verify-pull, --skip-tls-verify-registry, --verbosity, --snapshotMode, --use-new-run. These options will be used only on Kubernetes where the Kaniko executor is used. They will be ignored on OpenShift. The options are described in the <a href="https://github.com/GoogleContainerTools/kaniko" target="_blank" rel="noopener">Kaniko GitHub repository</a>. Changing this field does not trigger new build of the Kafka Connect image.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>docker</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ImageStreamOutput-reference"><a class="link" href="#type-ImageStreamOutput-reference">89. <code>ImageStreamOutput</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Build-reference"><code>Build</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>ImageStreamOutput</code> type from <a href="#type-DockerOutput-reference"><code>DockerOutput</code></a>.
It must have the value <code>imagestream</code> for the type <code>ImageStreamOutput</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name and tag of the ImageStream where the newly built image will be pushed. For example <code>my-custom-connect:latest</code>. Required.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>imagestream</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-Plugin-reference"><a class="link" href="#type-Plugin-reference">90. <code>Plugin</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Build-reference"><code>Build</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The unique name of the connector plugin. Will be used to generate the path where the connector artifacts will be stored. The name has to be unique within the KafkaConnect resource. The name has to follow the following pattern: <code>^[a-z][-_a-z0-9]*[a-z]$</code>. Required.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">artifacts</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JarArtifact-reference"><code>JarArtifact</code></a>, <a href="#type-TgzArtifact-reference"><code>TgzArtifact</code></a>, <a href="#type-ZipArtifact-reference"><code>ZipArtifact</code></a>, <a href="#type-MavenArtifact-reference"><code>MavenArtifact</code></a>, <a href="#type-OtherArtifact-reference"><code>OtherArtifact</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of artifacts which belong to this connector plugin. Required.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-JarArtifact-reference"><a class="link" href="#type-JarArtifact-reference">91. <code>JarArtifact</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Plugin-reference"><code>Plugin</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URL of the artifact which will be downloaded. Strimzi does not do any security scanning of the downloaded artifacts. For security reasons, you should first verify the artifacts manually and configure the checksum verification to make sure the same artifact is used in the automated build. Required for <code>jar</code>, <code>zip</code>, <code>tgz</code> and <code>other</code> artifacts. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sha512sum</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>SHA512 checksum of the artifact. Optional. If specified, the checksum will be verified while building the new container. If not specified, the downloaded artifact will not be verified. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">insecure</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>By default, connections using TLS are verified to check they are secure. The server certificate used must be valid, trusted, and contain the server name. By setting this option to <code>true</code>, all TLS verification is disabled and the artifact will be downloaded, even when the server is considered insecure.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>jar</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-TgzArtifact-reference"><a class="link" href="#type-TgzArtifact-reference">92. <code>TgzArtifact</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Plugin-reference"><code>Plugin</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URL of the artifact which will be downloaded. Strimzi does not do any security scanning of the downloaded artifacts. For security reasons, you should first verify the artifacts manually and configure the checksum verification to make sure the same artifact is used in the automated build. Required for <code>jar</code>, <code>zip</code>, <code>tgz</code> and <code>other</code> artifacts. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sha512sum</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>SHA512 checksum of the artifact. Optional. If specified, the checksum will be verified while building the new container. If not specified, the downloaded artifact will not be verified. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">insecure</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>By default, connections using TLS are verified to check they are secure. The server certificate used must be valid, trusted, and contain the server name. By setting this option to <code>true</code>, all TLS verification is disabled and the artifact will be downloaded, even when the server is considered insecure.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>tgz</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ZipArtifact-reference"><a class="link" href="#type-ZipArtifact-reference">93. <code>ZipArtifact</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Plugin-reference"><code>Plugin</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URL of the artifact which will be downloaded. Strimzi does not do any security scanning of the downloaded artifacts. For security reasons, you should first verify the artifacts manually and configure the checksum verification to make sure the same artifact is used in the automated build. Required for <code>jar</code>, <code>zip</code>, <code>tgz</code> and <code>other</code> artifacts. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sha512sum</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>SHA512 checksum of the artifact. Optional. If specified, the checksum will be verified while building the new container. If not specified, the downloaded artifact will not be verified. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">insecure</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>By default, connections using TLS are verified to check they are secure. The server certificate used must be valid, trusted, and contain the server name. By setting this option to <code>true</code>, all TLS verification is disabled and the artifact will be downloaded, even when the server is considered insecure.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>zip</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-MavenArtifact-reference"><a class="link" href="#type-MavenArtifact-reference">94. <code>MavenArtifact</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Plugin-reference"><code>Plugin</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>MavenArtifact</code> type from <a href="#type-JarArtifact-reference"><code>JarArtifact</code></a>, <a href="#type-TgzArtifact-reference"><code>TgzArtifact</code></a>, <a href="#type-ZipArtifact-reference"><code>ZipArtifact</code></a>, <a href="#type-OtherArtifact-reference"><code>OtherArtifact</code></a>.
It must have the value <code>maven</code> for the type <code>MavenArtifact</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">repository</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Maven repository to download the artifact from. Applicable to the <code>maven</code> artifact type only.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">group</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Maven group id. Applicable to the <code>maven</code> artifact type only.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">artifact</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Maven artifact id. Applicable to the <code>maven</code> artifact type only.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Maven version number. Applicable to the <code>maven</code> artifact type only.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">insecure</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>By default, connections using TLS are verified to check they are secure. The server certificate used must be valid, trusted, and contain the server name. By setting this option to <code>true</code>, all TLS verification is disabled and the artifacts will be downloaded, even when the server is considered insecure.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>maven</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-OtherArtifact-reference"><a class="link" href="#type-OtherArtifact-reference">95. <code>OtherArtifact</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Plugin-reference"><code>Plugin</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>URL of the artifact which will be downloaded. Strimzi does not do any security scanning of the downloaded artifacts. For security reasons, you should first verify the artifacts manually and configure the checksum verification to make sure the same artifact is used in the automated build. Required for <code>jar</code>, <code>zip</code>, <code>tgz</code> and <code>other</code> artifacts. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sha512sum</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>SHA512 checksum of the artifact. Optional. If specified, the checksum will be verified while building the new container. If not specified, the downloaded artifact will not be verified. Not applicable to the <code>maven</code> artifact type.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">fileName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name under which the artifact will be stored.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">insecure</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>By default, connections using TLS are verified to check they are secure. The server certificate used must be valid, trusted, and contain the server name. By setting this option to <code>true</code>, all TLS verification is disabled and the artifact will be downloaded, even when the server is considered insecure.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>other</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaConnectStatus-reference"><a class="link" href="#type-KafkaConnectStatus-reference">96. <code>KafkaConnectStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnect-reference"><code>KafkaConnect</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The URL of the REST API endpoint for managing and monitoring Kafka Connect connectors.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectorPlugins</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ConnectorPlugin-reference"><code>ConnectorPlugin</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The list of connector plugins available in this Kafka Connect deployment.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labelSelector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Label selector for pods providing this resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The current number of pods being used to provide this resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-ConnectorPlugin-reference"><a class="link" href="#type-ConnectorPlugin-reference">97. <code>ConnectorPlugin</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnectStatus-reference"><code>KafkaConnectStatus</code></a>, <a href="#type-KafkaMirrorMaker2Status-reference"><code>KafkaMirrorMaker2Status</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The type of the connector plugin. The available types are <code>sink</code> and <code>source</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The version of the connector plugin.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">class</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The class of the connector plugin.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaTopic-reference"><a class="link" href="#type-KafkaTopic-reference">98. <code>KafkaTopic</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaTopicSpec-reference"><code>KafkaTopicSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the topic.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaTopicStatus-reference"><code>KafkaTopicStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the topic.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaTopicSpec-reference"><a class="link" href="#type-KafkaTopicSpec-reference">99. <code>KafkaTopicSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaTopic-reference"><code>KafkaTopic</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">partitions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of partitions the topic should have. This cannot be decreased after topic creation. It can be increased after topic creation, but it is important to understand the consequences that has, especially for topics with semantic partitioning. When absent this will default to the broker configuration for <code>num.partitions</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of replicas the topic should have. When absent this will default to the broker configuration for <code>default.replication.factor</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The topic configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the topic. When absent this will default to the metadata.name of the topic. It is recommended to not set this unless the topic name is not a valid Kubernetes resource name.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaTopicStatus-reference"><a class="link" href="#type-KafkaTopicStatus-reference">100. <code>KafkaTopicStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaTopic-reference"><code>KafkaTopic</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Topic name.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The topic&#8217;s id. For a KafkaTopic with the ready condition, this will change only if the topic gets deleted and recreated with the same name.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUser-reference"><a class="link" href="#type-KafkaUser-reference">101. <code>KafkaUser</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaUserSpec-reference"><code>KafkaUserSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the user.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaUserStatus-reference"><code>KafkaUserStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the Kafka User.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserSpec-reference"><a class="link" href="#type-KafkaUserSpec-reference">102. <code>KafkaUserSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUser-reference"><code>KafkaUser</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaUserTlsClientAuthentication-reference"><code>KafkaUserTlsClientAuthentication</code></a>, <a href="#type-KafkaUserTlsExternalClientAuthentication-reference"><code>KafkaUserTlsExternalClientAuthentication</code></a>, <a href="#type-KafkaUserScramSha512ClientAuthentication-reference"><code>KafkaUserScramSha512ClientAuthentication</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication mechanism enabled for this Kafka user. The supported authentication mechanisms are <code>scram-sha-512</code>, <code>tls</code>, and <code>tls-external</code>.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>scram-sha-512</code> generates a secret with SASL SCRAM-SHA-512 credentials.</p>
</li>
<li>
<p><code>tls</code> generates a secret with user certificate for mutual TLS authentication.</p>
</li>
<li>
<p><code>tls-external</code> does not generate a user certificate.   But prepares the user for using mutual TLS authentication using a user certificate generated outside the User Operator.
ACLs and quotas set for this user are configured in the <code>CN=&lt;username&gt;</code> format.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Authentication is optional. If authentication is not configured, no credentials are generated. ACLs and quotas set for the user are configured in the <code>&lt;username&gt;</code> format suitable for SASL authentication.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authorization</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaUserAuthorizationSimple-reference"><code>KafkaUserAuthorizationSimple</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authorization rules for this Kafka user.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">quotas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaUserQuotas-reference"><code>KafkaUserQuotas</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Quotas on requests to control the broker resources used by clients. Network bandwidth and request rate quotas can be enforced.Kafka documentation for Kafka User quotas can be found at <a href="http://kafka.apache.org/documentation/#design_quotas" class="bare">http://kafka.apache.org/documentation/#design_quotas</a>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaUserTemplate-reference"><code>KafkaUserTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template to specify how Kafka User <code>Secrets</code> are generated.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserTlsClientAuthentication-reference"><a class="link" href="#type-KafkaUserTlsClientAuthentication-reference">103. <code>KafkaUserTlsClientAuthentication</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserSpec-reference"><code>KafkaUserSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaUserTlsClientAuthentication</code> type from <a href="#type-KafkaUserTlsExternalClientAuthentication-reference"><code>KafkaUserTlsExternalClientAuthentication</code></a>, <a href="#type-KafkaUserScramSha512ClientAuthentication-reference"><code>KafkaUserScramSha512ClientAuthentication</code></a>.
It must have the value <code>tls</code> for the type <code>KafkaUserTlsClientAuthentication</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>tls</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserTlsExternalClientAuthentication-reference"><a class="link" href="#type-KafkaUserTlsExternalClientAuthentication-reference">104. <code>KafkaUserTlsExternalClientAuthentication</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserSpec-reference"><code>KafkaUserSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaUserTlsExternalClientAuthentication</code> type from <a href="#type-KafkaUserTlsClientAuthentication-reference"><code>KafkaUserTlsClientAuthentication</code></a>, <a href="#type-KafkaUserScramSha512ClientAuthentication-reference"><code>KafkaUserScramSha512ClientAuthentication</code></a>.
It must have the value <code>tls-external</code> for the type <code>KafkaUserTlsExternalClientAuthentication</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>tls-external</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserScramSha512ClientAuthentication-reference"><a class="link" href="#type-KafkaUserScramSha512ClientAuthentication-reference">105. <code>KafkaUserScramSha512ClientAuthentication</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserSpec-reference"><code>KafkaUserSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaUserScramSha512ClientAuthentication</code> type from <a href="#type-KafkaUserTlsClientAuthentication-reference"><code>KafkaUserTlsClientAuthentication</code></a>, <a href="#type-KafkaUserTlsExternalClientAuthentication-reference"><code>KafkaUserTlsExternalClientAuthentication</code></a>.
It must have the value <code>scram-sha-512</code> for the type <code>KafkaUserScramSha512ClientAuthentication</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">password</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Password-reference"><code>Password</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specify the password for the user. If not set, a new password is generated by the User Operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>scram-sha-512</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-Password-reference"><a class="link" href="#type-Password-reference">106. <code>Password</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserScramSha512ClientAuthentication-reference"><code>KafkaUserScramSha512ClientAuthentication</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">valueFrom</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PasswordSource-reference"><code>PasswordSource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Secret from which the password should be read.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-PasswordSource-reference"><a class="link" href="#type-PasswordSource-reference">107. <code>PasswordSource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-Password-reference"><code>Password</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secretKeyRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#secretkeyselector-v1-core">SecretKeySelector</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Selects a key of a Secret in the resource&#8217;s namespace.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserAuthorizationSimple-reference"><a class="link" href="#type-KafkaUserAuthorizationSimple-reference">108. <code>KafkaUserAuthorizationSimple</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserSpec-reference"><code>KafkaUserSpec</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>KafkaUserAuthorizationSimple</code> type from other subtypes which may be added in the future.
It must have the value <code>simple</code> for the type <code>KafkaUserAuthorizationSimple</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>simple</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">acls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-AclRule-reference"><code>AclRule</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of ACL rules which should be applied to this user.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-AclRule-reference"><a class="link" href="#type-AclRule-reference">109. <code>AclRule</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserAuthorizationSimple-reference"><code>KafkaUserAuthorizationSimple</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-AclRule-schema-reference">Full list of <code>AclRule</code> schema properties</a></p>
</div>
<div class="sect2">
<h3 id="type-AclRule-schema-reference"><a class="link" href="#type-AclRule-schema-reference">109.1. <code>AclRule</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The host from which the action described in the ACL rule is allowed or denied.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">operation</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [Read, Write, Delete, Alter, Describe, All, IdempotentWrite, ClusterAction, Create, AlterConfigs, DescribeConfigs])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>operation</code> property has been deprecated, and should now be configured using <code>spec.authorization.acls[*].operations</code>.</strong> Operation which will be allowed or denied. Supported operations are: Read, Write, Create, Delete, Alter, Describe, ClusterAction, AlterConfigs, DescribeConfigs, IdempotentWrite and All.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">operations</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one or more of [Read, Write, Delete, Alter, Describe, All, IdempotentWrite, ClusterAction, Create, AlterConfigs, DescribeConfigs]) array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of operations which will be allowed or denied. Supported operations are: Read, Write, Create, Delete, Alter, Describe, ClusterAction, AlterConfigs, DescribeConfigs, IdempotentWrite and All.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resource</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-AclRuleTopicResource-reference"><code>AclRuleTopicResource</code></a>, <a href="#type-AclRuleGroupResource-reference"><code>AclRuleGroupResource</code></a>, <a href="#type-AclRuleClusterResource-reference"><code>AclRuleClusterResource</code></a>, <a href="#type-AclRuleTransactionalIdResource-reference"><code>AclRuleTransactionalIdResource</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Indicates the resource for which given ACL rule applies.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [allow, deny])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The type of the rule. Currently the only supported type is <code>allow</code>. ACL rules with type <code>allow</code> are used to allow user to execute the specified operations. Default value is <code>allow</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-AclRuleTopicResource-reference"><a class="link" href="#type-AclRuleTopicResource-reference">110. <code>AclRuleTopicResource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-AclRule-reference"><code>AclRule</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>AclRuleTopicResource</code> type from <a href="#type-AclRuleGroupResource-reference"><code>AclRuleGroupResource</code></a>, <a href="#type-AclRuleClusterResource-reference"><code>AclRuleClusterResource</code></a>, <a href="#type-AclRuleTransactionalIdResource-reference"><code>AclRuleTransactionalIdResource</code></a>.
It must have the value <code>topic</code> for the type <code>AclRuleTopicResource</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>topic</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name of resource for which given ACL rule applies. Can be combined with <code>patternType</code> field to use prefix pattern.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">patternType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [prefix, literal])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Describes the pattern used in the resource field. The supported types are <code>literal</code> and <code>prefix</code>. With <code>literal</code> pattern type, the resource field will be used as a definition of a full topic name. With <code>prefix</code> pattern type, the resource name will be used only as a prefix. Default value is <code>literal</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-AclRuleGroupResource-reference"><a class="link" href="#type-AclRuleGroupResource-reference">111. <code>AclRuleGroupResource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-AclRule-reference"><code>AclRule</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>AclRuleGroupResource</code> type from <a href="#type-AclRuleTopicResource-reference"><code>AclRuleTopicResource</code></a>, <a href="#type-AclRuleClusterResource-reference"><code>AclRuleClusterResource</code></a>, <a href="#type-AclRuleTransactionalIdResource-reference"><code>AclRuleTransactionalIdResource</code></a>.
It must have the value <code>group</code> for the type <code>AclRuleGroupResource</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>group</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name of resource for which given ACL rule applies. Can be combined with <code>patternType</code> field to use prefix pattern.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">patternType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [prefix, literal])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Describes the pattern used in the resource field. The supported types are <code>literal</code> and <code>prefix</code>. With <code>literal</code> pattern type, the resource field will be used as a definition of a full topic name. With <code>prefix</code> pattern type, the resource name will be used only as a prefix. Default value is <code>literal</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-AclRuleClusterResource-reference"><a class="link" href="#type-AclRuleClusterResource-reference">112. <code>AclRuleClusterResource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-AclRule-reference"><code>AclRule</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>AclRuleClusterResource</code> type from <a href="#type-AclRuleTopicResource-reference"><code>AclRuleTopicResource</code></a>, <a href="#type-AclRuleGroupResource-reference"><code>AclRuleGroupResource</code></a>, <a href="#type-AclRuleTransactionalIdResource-reference"><code>AclRuleTransactionalIdResource</code></a>.
It must have the value <code>cluster</code> for the type <code>AclRuleClusterResource</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>cluster</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-AclRuleTransactionalIdResource-reference"><a class="link" href="#type-AclRuleTransactionalIdResource-reference">113. <code>AclRuleTransactionalIdResource</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-AclRule-reference"><code>AclRule</code></a></p>
</div>
<div class="paragraph">
<p>The <code>type</code> property is a discriminator that distinguishes use of the <code>AclRuleTransactionalIdResource</code> type from <a href="#type-AclRuleTopicResource-reference"><code>AclRuleTopicResource</code></a>, <a href="#type-AclRuleGroupResource-reference"><code>AclRuleGroupResource</code></a>, <a href="#type-AclRuleClusterResource-reference"><code>AclRuleClusterResource</code></a>.
It must have the value <code>transactionalId</code> for the type <code>AclRuleTransactionalIdResource</code>.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Must be <code>transactionalId</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Name of resource for which given ACL rule applies. Can be combined with <code>patternType</code> field to use prefix pattern.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">patternType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [prefix, literal])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Describes the pattern used in the resource field. The supported types are <code>literal</code> and <code>prefix</code>. With <code>literal</code> pattern type, the resource field will be used as a definition of a full name. With <code>prefix</code> pattern type, the resource name will be used only as a prefix. Default value is <code>literal</code>.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserQuotas-reference"><a class="link" href="#type-KafkaUserQuotas-reference">114. <code>KafkaUserQuotas</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserSpec-reference"><code>KafkaUserSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaUserQuotas-schema-reference">Full list of <code>KafkaUserQuotas</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Kafka allows a user to set <code>quotas</code> to control the use of resources by clients.</p>
</div>
<div class="sect2">
<h3 id="quotas"><a class="link" href="#quotas">114.1. <code>quotas</code></a></h3>
<div class="paragraph">
<p>You can configure your clients to use the following types of quotas:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><em>Network usage</em> quotas specify the byte rate threshold for each group of clients sharing a quota.</p>
</li>
<li>
<p><em>CPU utilization</em> quotas specify a window for broker requests from clients. The window is the percentage of time for clients to make requests. A client makes requests on the I/O threads and network threads of the broker.</p>
</li>
<li>
<p><em>Partition mutation</em> quotas limit the number of partition mutations which clients are allowed to make per second.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>A partition mutation quota prevents Kafka clusters from being overwhelmed by concurrent topic operations.
Partition mutations occur in response to the following types of user requests:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Creating partitions for a new topic</p>
</li>
<li>
<p>Adding partitions to an existing topic</p>
</li>
<li>
<p>Deleting partitions from a topic</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You can configure a partition mutation quota to control the rate at which mutations are accepted for user requests.</p>
</div>
<div class="paragraph">
<p>Using quotas for Kafka clients might be useful in a number of situations.
Consider a wrongly configured Kafka producer which is sending requests at too high a rate.
Such misconfiguration can cause a denial of service to other clients, so the problematic client ought to be blocked.
By using a network limiting quota, it is possible to prevent this situation from significantly impacting other clients.</p>
</div>
<div class="paragraph">
<p>Strimzi supports user-level quotas, but not client-level quotas.</p>
</div>
<div class="listingblock">
<div class="title">Example Kafka user quota configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">spec:
  quotas:
    producerByteRate: 1048576
    consumerByteRate: 2097152
    requestPercentage: 55
    controllerMutationRate: 10</code></pre>
</div>
</div>
<div class="paragraph">
<p>For more information about Kafka user quotas, refer to the <a href="http://kafka.apache.org/documentation/#design_quotas" target="_blank" rel="noopener">Apache Kafka documentation</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaUserQuotas-schema-reference"><a class="link" href="#type-KafkaUserQuotas-schema-reference">114.2. <code>KafkaUserQuotas</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">consumerByteRate</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A quota on the maximum bytes per-second that each client group can fetch from a broker before the clients in the group are throttled. Defined on a per-broker basis.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">controllerMutationRate</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">number</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A quota on the rate at which mutations are accepted for the create topics request, the create partitions request and the delete topics request. The rate is accumulated by the number of partitions created or deleted.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">producerByteRate</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A quota on the maximum bytes per-second that each client group can publish to a broker before the clients in the group are throttled. Defined on a per-broker basis.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">requestPercentage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A quota on the maximum CPU utilization of each client group as a percentage of network and I/O threads.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserTemplate-reference"><a class="link" href="#type-KafkaUserTemplate-reference">115. <code>KafkaUserTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUserSpec-reference"><code>KafkaUserSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaUserTemplate-schema-reference">Full list of <code>KafkaUserTemplate</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Specify additional labels and annotations for the secret created by the User Operator.</p>
</div>
<div class="listingblock">
<div class="title">An example showing the <code>KafkaUserTemplate</code></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
  name: my-user
  labels:
    strimzi.io/cluster: my-cluster
spec:
  authentication:
    type: tls
  template:
    secret:
      metadata:
        labels:
          label1: value1
        annotations:
          anno1: value1
  # ...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaUserTemplate-schema-reference"><a class="link" href="#type-KafkaUserTemplate-schema-reference">115.1. <code>KafkaUserTemplate</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for KafkaUser resources. The template allows users to specify how the <code>Secret</code> with password or TLS certificates is generated.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaUserStatus-reference"><a class="link" href="#type-KafkaUserStatus-reference">116. <code>KafkaUserStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaUser-reference"><code>KafkaUser</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">username</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Username.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">secret</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of <code>Secret</code> where the credentials are stored.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMaker-reference"><a class="link" href="#type-KafkaMirrorMaker-reference">117. <code>KafkaMirrorMaker</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p><strong>The type <code>KafkaMirrorMaker</code> has been deprecated.</strong>
Please use <a href="#type-KafkaMirrorMaker2-reference"><code>KafkaMirrorMaker2</code></a> instead.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of Kafka MirrorMaker.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMakerStatus-reference"><code>KafkaMirrorMakerStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of Kafka MirrorMaker.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMakerSpec-reference"><a class="link" href="#type-KafkaMirrorMakerSpec-reference">118. <code>KafkaMirrorMakerSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMaker-reference"><code>KafkaMirrorMaker</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaMirrorMakerSpec-schema-reference">Full list of <code>KafkaMirrorMakerSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures Kafka MirrorMaker.</p>
</div>
<div class="sect2">
<h3 id="property-mm-include-reference"><a class="link" href="#property-mm-include-reference">118.1. <code>include</code></a></h3>
<div class="paragraph">
<p>Use the <code>include</code> property to configure a list of topics that Kafka MirrorMaker mirrors from the source to the target Kafka cluster.</p>
</div>
<div class="paragraph">
<p>The property allows any regular expression from the simplest case with a single topic name to complex patterns.
For example, you can mirror topics A and B using <code>A|B</code> or all topics using <code>*</code>.
You can also pass multiple regular expressions separated by commas to the Kafka MirrorMaker.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-mm-producer-consumer-reference"><a class="link" href="#property-mm-producer-consumer-reference">118.2. <code>KafkaMirrorMakerConsumerSpec</code> and <code>KafkaMirrorMakerProducerSpec</code></a></h3>
<div class="paragraph">
<p>Use the <code>KafkaMirrorMakerConsumerSpec</code> and <code>KafkaMirrorMakerProducerSpec</code> to configure source (consumer) and target (producer) clusters.</p>
</div>
<div class="paragraph">
<p>Kafka MirrorMaker always works together with two Kafka clusters (source and target).
To establish a connection, the bootstrap servers for the source and the target Kafka clusters are specified as comma-separated lists of <code><em>HOSTNAME:PORT</em></code> pairs.
Each comma-separated list contains one or more Kafka brokers or a <code>Service</code> pointing to Kafka brokers specified as a <code><em>HOSTNAME:PORT</em></code> pair.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-mm-loggers-reference"><a class="link" href="#property-mm-loggers-reference">118.3. <code>logging</code></a></h3>
<div class="paragraph">
<p>Kafka MirrorMaker has its own configurable logger:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>mirrormaker.root.logger</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>MirrorMaker uses the Apache <code>log4j</code> logger implementation.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration. Inside the ConfigMap, the logging configuration is described using <code>log4j.properties</code>. Both <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory. A ConfigMap using the exact logging configuration specified is created with the custom resource when the Cluster Operator is running, then recreated after each reconciliation. If you do not specify a custom ConfigMap, default logging settings are used. If a specific logger value is not set, upper-level logger settings are inherited for that logger.
For more information about log levels, see <a href="https://logging.apache.org/" target="_blank" rel="noopener">Apache logging services</a>.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.
The <code>inline</code> logging specifies the root logger level.
You can also set log levels for specific classes or loggers by adding them to the loggers property.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker
spec:
  # ...
  logging:
    type: inline
    loggers:
      mirrormaker.root.logger: INFO
      log4j.logger.org.apache.kafka.clients.NetworkClient: TRACE
      log4j.logger.org.apache.kafka.common.network.Selector: DEBUG
  # ...</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Setting a log level to <code>DEBUG</code> may result in a large amount of log output and may have performance implications.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker
spec:
  # ...
  logging:
    type: external
    valueFrom:
      configMapKeyRef:
        name: customConfigMap
        key: mirror-maker-log4j.properties
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaMirrorMakerSpec-schema-reference"><a class="link" href="#type-KafkaMirrorMakerSpec-schema-reference">118.4. <code>KafkaMirrorMakerSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka MirrorMaker version. Defaults to the latest version. Consult the documentation to understand the process required to upgrade or downgrade the version.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of pods in the <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for Kafka MirrorMaker pods. If no image name is explicitly specified, it is determined based on the <code>spec.version</code> configuration. The image names are specifically mapped to corresponding versions in the Cluster Operator configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">consumer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMakerConsumerSpec-reference"><code>KafkaMirrorMakerConsumerSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of source cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">producer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMakerProducerSpec-reference"><code>KafkaMirrorMakerProducerSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of target cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">whitelist</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>whitelist</code> property has been deprecated, and should now be configured using <code>spec.include</code>.</strong> List of topics which are included for mirroring. This option allows any regular expression using Java-style regular expressions. Mirroring two topics named A and B is achieved by using the expression <code>A|B</code>. Or, as a special case, you can mirror all topics using the regular expression <code>*</code>. You can also specify multiple regular expressions separated by commas.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">include</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of topics which are included for mirroring. This option allows any regular expression using Java-style regular expressions. Mirroring two topics named A and B is achieved by using the expression <code>A|B</code>. Or, as a special case, you can mirror all topics using the regular expression <code>*</code>. You can also specify multiple regular expressions separated by commas.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration for MirrorMaker.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metricsConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxPrometheusExporterMetrics-reference"><code>JmxPrometheusExporterMetrics</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metrics configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tracing</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JaegerTracing-reference"><code>JaegerTracing</code></a>, <a href="#type-OpenTelemetryTracing-reference"><code>OpenTelemetryTracing</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The configuration of tracing in Kafka MirrorMaker.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMakerTemplate-reference"><code>KafkaMirrorMakerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template to specify how Kafka MirrorMaker resources, <code>Deployments</code> and <code>Pods</code>, are generated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMakerConsumerSpec-reference"><a class="link" href="#type-KafkaMirrorMakerConsumerSpec-reference">119. <code>KafkaMirrorMakerConsumerSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaMirrorMakerConsumerSpec-schema-reference">Full list of <code>KafkaMirrorMakerConsumerSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a MirrorMaker consumer.</p>
</div>
<div class="sect2">
<h3 id="property-consumer-streams-reference"><a class="link" href="#property-consumer-streams-reference">119.1. <code>numStreams</code></a></h3>
<div class="paragraph">
<p>Use the <code>consumer.numStreams</code> property to configure the number of streams for the consumer.</p>
</div>
<div class="paragraph">
<p>You can increase the throughput in mirroring topics by increasing the number of consumer threads.
Consumer threads belong to the consumer group specified for Kafka MirrorMaker.
Topic partitions are assigned across the consumer threads, which consume messages in parallel.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-consumer-offset-autocommit-reference"><a class="link" href="#property-consumer-offset-autocommit-reference">119.2. <code>offsetCommitInterval</code></a></h3>
<div class="paragraph">
<p>Use the <code>consumer.offsetCommitInterval</code> property to configure an offset auto-commit interval for the consumer.</p>
</div>
<div class="paragraph">
<p>You can specify the regular time interval at which an offset is committed after Kafka MirrorMaker has consumed data from the source Kafka cluster.
The time interval is set in milliseconds, with a default value of 60,000.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-consumer-config-reference"><a class="link" href="#property-consumer-config-reference">119.3. <code>config</code></a></h3>
<div class="paragraph">
<p>Use the <code>consumer.config</code> properties to configure Kafka options for the consumer as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://kafka.apache.org/documentation/#consumerconfigs" target="_blank" rel="noopener">Apache Kafka configuration documentation for consumers</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kafka cluster bootstrap address</p>
</li>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Consumer group identifier</p>
</li>
<li>
<p>Interceptors</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>bootstrap.servers</code></p>
</li>
<li>
<p><code>group.id</code></p>
</li>
<li>
<p><code>interceptor.classes</code></p>
</li>
<li>
<p><code>sasl.</code></p>
</li>
<li>
<p><code>security.</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to MirrorMaker, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
</ul>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
The Cluster Operator does not validate keys or values in the <code>config</code> object provided.
If an invalid configuration is provided, the MirrorMaker cluster might not start or might become unstable.
In this case, fix the configuration so that the Cluster Operator can roll out the new configuration to all MirrorMaker nodes.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="property-consumer-group-reference"><a class="link" href="#property-consumer-group-reference">119.4. <code>groupId</code></a></h3>
<div class="paragraph">
<p>Use the <code>consumer.groupId</code> property to configure a consumer group identifier for the consumer.</p>
</div>
<div class="paragraph">
<p>Kafka MirrorMaker uses a Kafka consumer to consume messages, behaving like any other Kafka consumer client.
Messages consumed from the source Kafka cluster are mirrored to a target Kafka cluster.
A group identifier is required, as the consumer needs to be part of a consumer group for the assignment of partitions.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaMirrorMakerConsumerSpec-schema-reference"><a class="link" href="#type-KafkaMirrorMakerConsumerSpec-schema-reference">119.5. <code>KafkaMirrorMakerConsumerSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">numStreams</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies the number of consumer stream threads to create.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">offsetCommitInterval</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Specifies the offset auto-commit interval in ms. Default value is 60000.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrapServers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of host:port pairs for establishing the initial connection to the Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A unique string that identifies the consumer group this consumer belongs to.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication configuration for connecting to the cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The MirrorMaker consumer config. Properties with the following prefixes cannot be set: ssl., bootstrap.servers, group.id, sasl., security., interceptor.classes (with the exception of: ssl.endpoint.identification.algorithm, ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ClientTls-reference"><code>ClientTls</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>TLS configuration for connecting MirrorMaker to the cluster.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMakerProducerSpec-reference"><a class="link" href="#type-KafkaMirrorMakerProducerSpec-reference">120. <code>KafkaMirrorMakerProducerSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaMirrorMakerProducerSpec-schema-reference">Full list of <code>KafkaMirrorMakerProducerSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a MirrorMaker producer.</p>
</div>
<div class="sect2">
<h3 id="property-producer-abort-on-send-reference"><a class="link" href="#property-producer-abort-on-send-reference">120.1. <code>abortOnSendFailure</code></a></h3>
<div class="paragraph">
<p>Use the <code>producer.abortOnSendFailure</code> property to configure how to handle message send failure from the producer.</p>
</div>
<div class="paragraph">
<p>By default, if an error occurs when sending a message from Kafka MirrorMaker to a Kafka cluster:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The Kafka MirrorMaker container is terminated in Kubernetes.</p>
</li>
<li>
<p>The container is then recreated.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>abortOnSendFailure</code> option is set to <code>false</code>, message sending errors are ignored.</p>
</div>
</div>
<div class="sect2">
<h3 id="property-producer-config-reference"><a class="link" href="#property-producer-config-reference">120.2. <code>config</code></a></h3>
<div class="paragraph">
<p>Use the <code>producer.config</code> properties to configure Kafka options for the producer as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://kafka.apache.org/documentation/#producerconfigs" target="_blank" rel="noopener">Apache Kafka configuration documentation for producers</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kafka cluster bootstrap address</p>
</li>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Interceptors</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>bootstrap.servers</code></p>
</li>
<li>
<p><code>interceptor.classes</code></p>
</li>
<li>
<p><code>sasl.</code></p>
</li>
<li>
<p><code>security.</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to MirrorMaker, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
</ul>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
The Cluster Operator does not validate keys or values in the <code>config</code> object provided.
If an invalid configuration is provided, the MirrorMaker cluster might not start or might become unstable.
In this case, fix the configuration so that the Cluster Operator can roll out the new configuration to all MirrorMaker nodes.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaMirrorMakerProducerSpec-schema-reference"><a class="link" href="#type-KafkaMirrorMakerProducerSpec-schema-reference">120.3. <code>KafkaMirrorMakerProducerSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrapServers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of host:port pairs for establishing the initial connection to the Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">abortOnSendFailure</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Flag to set the MirrorMaker to exit on a failed send. Default value is <code>true</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication configuration for connecting to the cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The MirrorMaker producer config. Properties with the following prefixes cannot be set: ssl., bootstrap.servers, sasl., security., interceptor.classes (with the exception of: ssl.endpoint.identification.algorithm, ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols).</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ClientTls-reference"><code>ClientTls</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>TLS configuration for connecting MirrorMaker to the cluster.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMakerTemplate-reference"><a class="link" href="#type-KafkaMirrorMakerTemplate-reference">121. <code>KafkaMirrorMakerTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMakerSpec-reference"><code>KafkaMirrorMakerSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka MirrorMaker <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka MirrorMaker <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podDisruptionBudget</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodDisruptionBudgetTemplate-reference"><code>PodDisruptionBudgetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka MirrorMaker <code>PodDisruptionBudget</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mirrorMakerContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka MirrorMaker container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka MirrorMaker service account.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMakerStatus-reference"><a class="link" href="#type-KafkaMirrorMakerStatus-reference">122. <code>KafkaMirrorMakerStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMaker-reference"><code>KafkaMirrorMaker</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labelSelector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Label selector for pods providing this resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The current number of pods being used to provide this resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridge-reference"><a class="link" href="#type-KafkaBridge-reference">123. <code>KafkaBridge</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka Bridge.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeStatus-reference"><code>KafkaBridgeStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the Kafka Bridge.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeSpec-reference"><a class="link" href="#type-KafkaBridgeSpec-reference">124. <code>KafkaBridgeSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridge-reference"><code>KafkaBridge</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaBridgeSpec-schema-reference">Full list of <code>KafkaBridgeSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures a Kafka Bridge cluster.</p>
</div>
<div class="paragraph">
<p>Configuration options relate to:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kafka cluster bootstrap address</p>
</li>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Consumer configuration</p>
</li>
<li>
<p>Producer configuration</p>
</li>
<li>
<p>HTTP configuration</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="property-kafka-bridge-logging-reference"><a class="link" href="#property-kafka-bridge-logging-reference">124.1. <code>logging</code></a></h3>
<div class="paragraph">
<p>Kafka Bridge has its own configurable loggers:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>rootLogger.level</code></p>
</li>
<li>
<p><code>logger.<em>&lt;operation-id&gt;</em></code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You can replace <code><em>&lt;operation-id&gt;</em></code> in the <code>logger.<em>&lt;operation-id&gt;</em></code> logger to set log levels for specific operations:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>createConsumer</code></p>
</li>
<li>
<p><code>deleteConsumer</code></p>
</li>
<li>
<p><code>subscribe</code></p>
</li>
<li>
<p><code>unsubscribe</code></p>
</li>
<li>
<p><code>poll</code></p>
</li>
<li>
<p><code>assign</code></p>
</li>
<li>
<p><code>commit</code></p>
</li>
<li>
<p><code>send</code></p>
</li>
<li>
<p><code>sendToPartition</code></p>
</li>
<li>
<p><code>seekToBeginning</code></p>
</li>
<li>
<p><code>seekToEnd</code></p>
</li>
<li>
<p><code>seek</code></p>
</li>
<li>
<p><code>healthy</code></p>
</li>
<li>
<p><code>ready</code></p>
</li>
<li>
<p><code>openapi</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Each operation is defined according OpenAPI specification, and has a corresponding API endpoint through which the bridge receives requests from HTTP clients.
You can change the log level on each endpoint to create fine-grained logging information about the incoming and outgoing HTTP requests.</p>
</div>
<div class="paragraph">
<p>Each logger has to be configured assigning it a <code>name</code> as <code>http.openapi.operation.<em>&lt;operation-id&gt;</em></code>.
For example, configuring the logging level for the <code>send</code> operation logger means defining the following:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">logger.send.name = http.openapi.operation.send
logger.send.level = DEBUG</code></pre>
</div>
</div>
<div class="paragraph">
<p>Kafka Bridge uses the Apache <code>log4j2</code> logger implementation.
Loggers are defined in the <code>log4j2.properties</code> file, which has the following default configuration for <code>healthy</code> and <code>ready</code> endpoints:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">logger.healthy.name = http.openapi.operation.healthy
logger.healthy.level = WARN
logger.ready.name = http.openapi.operation.ready
logger.ready.level = WARN</code></pre>
</div>
</div>
<div class="paragraph">
<p>The log level of all other operations is set to <code>INFO</code> by default.</p>
</div>
<div class="paragraph">
<p>Use the <code>logging</code> property to configure loggers and logger levels.</p>
</div>
<div class="paragraph">
<p>You can set the log levels by specifying the logger and level directly (inline) or use a custom (external) ConfigMap.
If a ConfigMap is used, you set <code>logging.valueFrom.configMapKeyRef.name</code> property to the name of the ConfigMap containing the external logging configuration.
The <code>logging.valueFrom.configMapKeyRef.name</code> and <code>logging.valueFrom.configMapKeyRef.key</code> properties are mandatory.
Default logging is used if the <code>name</code> or <code>key</code> is not set.
Inside the ConfigMap, the logging configuration is described using <code>log4j.properties</code>.
For more information about log levels, see <a href="https://logging.apache.org/" target="_blank" rel="noopener">Apache logging services</a>.</p>
</div>
<div class="paragraph">
<p>Here we see examples of <code>inline</code> and <code>external</code> logging.</p>
</div>
<div class="listingblock">
<div class="title">Inline logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaBridge
spec:
  # ...
  logging:
    type: inline
    loggers:
      rootLogger.level: INFO
      # enabling DEBUG just for send operation
      logger.send.name: "http.openapi.operation.send"
      logger.send.level: DEBUG
  # ...</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">External logging</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaBridge
spec:
  # ...
  logging:
    type: external
    valueFrom:
      configMapKeyRef:
        name: customConfigMap
        key: bridge-logj42.properties
  # ...</code></pre>
</div>
</div>
<div class="paragraph">
<p>Any available loggers that are not configured have their level set to <code>OFF</code>.</p>
</div>
<div class="paragraph">
<p>If the Kafka Bridge was deployed using the Cluster Operator,
changes to Kafka Bridge logging levels are applied dynamically.</p>
</div>
<div class="paragraph">
<p>If you use external logging, a rolling update is triggered when logging appenders are changed.</p>
</div>
<div class="paragraph">
<div class="title">Garbage collector (GC)</div>
<p>Garbage collector logging can also be enabled (or disabled) using the <a href="#con-common-configuration-garbage-collection-reference"><code>jvmOptions</code> property</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaBridgeSpec-schema-reference"><a class="link" href="#type-KafkaBridgeSpec-schema-reference">124.2. <code>KafkaBridgeSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of pods in the <code>Deployment</code>.  Defaults to <code>1</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for Kafka Bridge pods. If no image name is explicitly specified, the image name corresponds to the image specified in the Cluster Operator configuration. If an image name is not defined in the Cluster Operator configuration, a default value is used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrapServers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of host:port pairs for establishing the initial connection to the Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ClientTls-reference"><code>ClientTls</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>TLS configuration for connecting Kafka Bridge to the cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication configuration for connecting to the cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">http</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeHttpConfig-reference"><code>KafkaBridgeHttpConfig</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The HTTP related configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">adminClient</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeAdminClientSpec-reference"><code>KafkaBridgeAdminClientSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kafka AdminClient related configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">consumer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeConsumerSpec-reference"><code>KafkaBridgeConsumerSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kafka consumer related configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">producer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeProducerSpec-reference"><code>KafkaBridgeProducerSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kafka producer related configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>Currently not supported</strong> JVM Options for pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration for Kafka Bridge.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientRackInitImage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The image of the init container used for initializing the <code>client.rack</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">rack</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Rack-reference"><code>Rack</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the node label which will be used as the client.rack consumer configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enableMetrics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enable the metrics for the Kafka Bridge. Default is false.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeTemplate-reference"><code>KafkaBridgeTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Bridge resources. The template allows users to specify how a <code>Deployment</code> and <code>Pod</code> is generated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tracing</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JaegerTracing-reference"><code>JaegerTracing</code></a>, <a href="#type-OpenTelemetryTracing-reference"><code>OpenTelemetryTracing</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The configuration of tracing in Kafka Bridge.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeHttpConfig-reference"><a class="link" href="#type-KafkaBridgeHttpConfig-reference">125. <code>KafkaBridgeHttpConfig</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaBridgeHttpConfig-schema-reference">Full list of <code>KafkaBridgeHttpConfig</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures HTTP access to a Kafka cluster for the Kafka Bridge.</p>
</div>
<div class="paragraph">
<p>The default HTTP configuration is for the Kafka Bridge to listen on port 8080.</p>
</div>
<div class="sect2">
<h3 id="property-kafka-bridge-cors-config-reference"><a class="link" href="#property-kafka-bridge-cors-config-reference">125.1. <code>cors</code></a></h3>
<div class="paragraph">
<p>As well as enabling HTTP access to a Kafka cluster, HTTP properties provide the capability to enable and define access control for the Kafka Bridge through Cross-Origin Resource Sharing (CORS).
CORS is a HTTP mechanism that allows browser access to selected resources from more than one origin.
To configure CORS, you define a list of allowed resource origins and HTTP access methods.
For the origins, you can use a URL or a Java regular expression.</p>
</div>
<div class="listingblock">
<div class="title">Example Kafka Bridge HTTP configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaBridge
metadata:
  name: my-bridge
spec:
  # ...
  http:
    port: 8080
    cors:
      allowedOrigins: "https://strimzi.io"
      allowedMethods: "GET,POST,PUT,DELETE,OPTIONS,PATCH"
  # ...</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaBridgeHttpConfig-schema-reference"><a class="link" href="#type-KafkaBridgeHttpConfig-schema-reference">125.2. <code>KafkaBridgeHttpConfig</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">port</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The port which is the server listening on.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">cors</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaBridgeHttpCors-reference"><code>KafkaBridgeHttpCors</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CORS configuration for the HTTP Bridge.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeHttpCors-reference"><a class="link" href="#type-KafkaBridgeHttpCors-reference">126. <code>KafkaBridgeHttpCors</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeHttpConfig-reference"><code>KafkaBridgeHttpConfig</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">allowedOrigins</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of allowed origins. Java regular expressions can be used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">allowedMethods</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of allowed HTTP methods.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeAdminClientSpec-reference"><a class="link" href="#type-KafkaBridgeAdminClientSpec-reference">127. <code>KafkaBridgeAdminClientSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka AdminClient configuration used for AdminClient instances created by the bridge.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeConsumerSpec-reference"><a class="link" href="#type-KafkaBridgeConsumerSpec-reference">128. <code>KafkaBridgeConsumerSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaBridgeConsumerSpec-schema-reference">Full list of <code>KafkaBridgeConsumerSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures consumer options for the Kafka Bridge as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://kafka.apache.org/documentation/#consumerconfigs" target="_blank" rel="noopener">Apache Kafka configuration documentation for consumers</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kafka cluster bootstrap address</p>
</li>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Consumer group identifier</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>bootstrap.servers</code></p>
</li>
<li>
<p><code>group.id</code></p>
</li>
<li>
<p><code>sasl.</code></p>
</li>
<li>
<p><code>security.</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to Kafka Bridge, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example Kafka Bridge consumer configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaBridge
metadata:
  name: my-bridge
spec:
  # ...
  consumer:
    config:
      auto.offset.reset: earliest
      enable.auto.commit: true
    # ...</code></pre>
</div>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
The Cluster Operator does not validate keys or values in the <code>config</code> object.
If an invalid configuration is provided, the Kafka Bridge deployment might not start or might become unstable.
In this case, fix the configuration so that the Cluster Operator can roll out the new configuration to all Kafka Bridge nodes.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="type-KafkaBridgeConsumerSpec-schema-reference"><a class="link" href="#type-KafkaBridgeConsumerSpec-schema-reference">128.1. <code>KafkaBridgeConsumerSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka consumer configuration used for consumer instances created by the bridge. Properties with the following prefixes cannot be set: ssl., bootstrap.servers, group.id, sasl., security. (with the exception of: ssl.endpoint.identification.algorithm, ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols).</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeProducerSpec-reference"><a class="link" href="#type-KafkaBridgeProducerSpec-reference">129. <code>KafkaBridgeProducerSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaBridgeProducerSpec-schema-reference">Full list of <code>KafkaBridgeProducerSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures producer options for the Kafka Bridge as keys.</p>
</div>
<div class="paragraph">
<p>The values can be one of the following JSON types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String</p>
</li>
<li>
<p>Number</p>
</li>
<li>
<p>Boolean</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><strong>Exceptions</strong></p>
</div>
<div class="paragraph">
<p>You can specify and configure the options listed in the <a href="https://kafka.apache.org/documentation/#producerconfigs" target="_blank" rel="noopener">Apache Kafka configuration documentation for producers</a>.</p>
</div>
<div class="paragraph">
<p>However, Strimzi takes care of configuring and managing options related to the following, which cannot be changed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kafka cluster bootstrap address</p>
</li>
<li>
<p>Security (encryption, authentication, and authorization)</p>
</li>
<li>
<p>Consumer group identifier</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Properties with the following prefixes cannot be set:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>bootstrap.servers</code></p>
</li>
<li>
<p><code>sasl.</code></p>
</li>
<li>
<p><code>security.</code></p>
</li>
<li>
<p><code>ssl.</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>If the <code>config</code> property contains an option that cannot be changed, it is disregarded, and a warning message is logged to the Cluster Operator log file.
All other supported options are forwarded to Kafka Bridge, including the following exceptions to the options configured by Strimzi:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Any <code>ssl</code> configuration for <a href="#con-common-configuration-ssl-reference">supported TLS versions and cipher suites</a></p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="title">Example Kafka Bridge producer configuration</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaBridge
metadata:
  name: my-bridge
spec:
  # ...
  producer:
    config:
      acks: 1
      delivery.timeout.ms: 300000
    # ...</code></pre>
</div>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
The Cluster Operator does not validate keys or values in the <code>config</code> object.
If an invalid configuration is provided, the Kafka Bridge deployment might not start or might become unstable.
In this case, fix the configuration so that the Cluster Operator can roll out the new configuration to all Kafka Bridge nodes.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="type-KafkaBridgeProducerSpec-schema-reference"><a class="link" href="#type-KafkaBridgeProducerSpec-schema-reference">129.1. <code>KafkaBridgeProducerSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka producer configuration used for producer instances created by the bridge. Properties with the following prefixes cannot be set: ssl., bootstrap.servers, sasl., security. (with the exception of: ssl.endpoint.identification.algorithm, ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols).</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeTemplate-reference"><a class="link" href="#type-KafkaBridgeTemplate-reference">130. <code>KafkaBridgeTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridgeSpec-reference"><code>KafkaBridgeSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-DeploymentTemplate-reference"><code>DeploymentTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Bridge <code>Deployment</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Bridge <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">apiService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InternalServiceTemplate-reference"><code>InternalServiceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Bridge API <code>Service</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podDisruptionBudget</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodDisruptionBudgetTemplate-reference"><code>PodDisruptionBudgetTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Bridge <code>PodDisruptionBudget</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bridgeContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Bridge container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusterRoleBinding</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Bridge ClusterRoleBinding.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serviceAccount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Bridge service account.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">initContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka Bridge init container.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaBridgeStatus-reference"><a class="link" href="#type-KafkaBridgeStatus-reference">131. <code>KafkaBridgeStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaBridge-reference"><code>KafkaBridge</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The URL at which external client applications can access the Kafka Bridge.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labelSelector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Label selector for pods providing this resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The current number of pods being used to provide this resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaConnector-reference"><a class="link" href="#type-KafkaConnector-reference">132. <code>KafkaConnector</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaConnectorSpec-reference"><code>KafkaConnectorSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka Connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaConnectorStatus-reference"><code>KafkaConnectorStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the Kafka Connector.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaConnectorSpec-reference"><a class="link" href="#type-KafkaConnectorSpec-reference">133. <code>KafkaConnectorSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnector-reference"><code>KafkaConnector</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">class</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Class for the Kafka Connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tasksMax</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of tasks for the Kafka Connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">autoRestart</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-AutoRestart-reference"><code>AutoRestart</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Automatic restart of connector and tasks configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka Connector configuration. The following properties cannot be set: connector.class, tasks.max.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pause</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>pause</code> property has been deprecated.</strong> Deprecated in Strimzi 0.38.0, use state instead. Whether the connector should be paused. Defaults to false.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">state</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [running, paused, stopped])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The state the connector should be in. Defaults to running.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-AutoRestart-reference"><a class="link" href="#type-AutoRestart-reference">134. <code>AutoRestart</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnectorSpec-reference"><code>KafkaConnectorSpec</code></a>, <a href="#type-KafkaMirrorMaker2ConnectorSpec-reference"><code>KafkaMirrorMaker2ConnectorSpec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-AutoRestart-schema-reference">Full list of <code>AutoRestart</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures automatic restarts for connectors and tasks that are in a <code>FAILED</code> state.</p>
</div>
<div class="paragraph">
<p>When enabled, a back-off algorithm applies the automatic restart to each failed connector and its tasks.
An incremental back-off interval is calculated using the formula <code>n * n + n</code> where <code>n</code> represents the number of previous restarts.
This interval is capped at a maximum of 60 minutes.
Consequently, a restart occurs immediately, followed by restarts after 2, 6, 12, 20, 30, 42, 56 minutes, and then at 60-minute intervals.
By default, Strimzi initiates restarts of the connector and its tasks indefinitely.
However, you can use the <code>maxRestarts</code> property to set a maximum on the number of restarts.
If <code>maxRestarts</code> is configured and the connector still fails even after the final restart attempt, you must then restart the connector manually.</p>
</div>
<div class="paragraph">
<p>For Kafka Connect connectors, use the <code>autoRestart</code> property of the <code>KafkaConnector</code> resource to enable automatic restarts of failed connectors and tasks.</p>
</div>
<div class="listingblock">
<div class="title">Enabling automatic restarts of failed connectors for Kafka Connect</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
  name: my-source-connector
spec:
  autoRestart:
    enabled: true</code></pre>
</div>
</div>
<div class="paragraph">
<p>If you prefer, you can also set a maximum limit on the number of restarts.</p>
</div>
<div class="listingblock">
<div class="title">Enabling automatic restarts of failed connectors for Kafka Connect with limited number of restarts</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
  name: my-source-connector
spec:
  autoRestart:
    enabled: true
    maxRestarts: 10</code></pre>
</div>
</div>
<div class="paragraph">
<p>For MirrorMaker 2, use the <code>autoRestart</code> property of connectors in the <code>KafkaMirrorMaker2</code> resource to enable automatic restarts of failed connectors and tasks.</p>
</div>
<div class="listingblock">
<div class="title">Enabling automatic restarts of failed connectors for MirrorMaker 2</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
  name: my-mm2-cluster
spec:
  mirrors:
  - sourceConnector:
      autoRestart:
        enabled: true
      # ...
    heartbeatConnector:
      autoRestart:
        enabled: true
      # ...
    checkpointConnector:
      autoRestart:
        enabled: true
      # ...</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="type-AutoRestart-schema-reference"><a class="link" href="#type-AutoRestart-schema-reference">134.1. <code>AutoRestart</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether automatic restart for failed connectors and tasks should be enabled or disabled.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">maxRestarts</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of connector restarts that the operator will try. If the connector remains in a failed state after reaching this limit, it must be restarted manually by the user. Defaults to an unlimited number of restarts.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaConnectorStatus-reference"><a class="link" href="#type-KafkaConnectorStatus-reference">135. <code>KafkaConnectorStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnector-reference"><code>KafkaConnector</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">autoRestart</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-AutoRestartStatus-reference"><code>AutoRestartStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The auto restart status.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectorStatus</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The connector status, as reported by the Kafka Connect REST API.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tasksMax</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of tasks for the Kafka Connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The list of topics used by the Kafka Connector.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-AutoRestartStatus-reference"><a class="link" href="#type-AutoRestartStatus-reference">136. <code>AutoRestartStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaConnectorStatus-reference"><code>KafkaConnectorStatus</code></a>, <a href="#type-KafkaMirrorMaker2Status-reference"><code>KafkaMirrorMaker2Status</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">count</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of times the connector or task is restarted.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectorName</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The name of the connector being restarted.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">lastRestartTimestamp</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The last time the automatic restart was attempted. The required format is 'yyyy-MM-ddTHH:mm:ssZ' in the UTC time zone.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMaker2-reference"><a class="link" href="#type-KafkaMirrorMaker2-reference">137. <code>KafkaMirrorMaker2</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka MirrorMaker 2 cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMaker2Status-reference"><code>KafkaMirrorMaker2Status</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the Kafka MirrorMaker 2 cluster.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMaker2Spec-reference"><a class="link" href="#type-KafkaMirrorMaker2Spec-reference">138. <code>KafkaMirrorMaker2Spec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMaker2-reference"><code>KafkaMirrorMaker2</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka Connect version. Defaults to the latest version. Consult the user documentation to understand the process required to upgrade or downgrade the version.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of pods in the Kafka Connect group. Defaults to <code>3</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">image</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The container image used for Kafka Connect pods. If no image name is explicitly specified, it is determined based on the <code>spec.version</code> configuration. The image names are specifically mapped to corresponding versions in the Cluster Operator configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectCluster</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The cluster alias used for Kafka Connect. The value must match the alias of the <strong>target</strong> Kafka cluster as specified in the <code>spec.clusters</code> configuration. The target Kafka cluster is used by the underlying Kafka Connect framework for its internal topics.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusters</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMaker2ClusterSpec-reference"><code>KafkaMirrorMaker2ClusterSpec</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kafka clusters for mirroring.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mirrors</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMaker2MirrorSpec-reference"><code>KafkaMirrorMaker2MirrorSpec</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the MirrorMaker 2 connectors.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum limits for CPU and memory resources and the requested initial resources.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">livenessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod liveness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readinessProbe</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Probe-reference"><code>Probe</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pod readiness checking.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jmxOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaJmxOptions-reference"><code>KafkaJmxOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JMX Options.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">logging</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-InlineLogging-reference"><code>InlineLogging</code></a>, <a href="#type-ExternalLogging-reference"><code>ExternalLogging</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Logging configuration for Kafka Connect.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientRackInitImage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The image of the init container used for initializing the <code>client.rack</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">rack</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Rack-reference"><code>Rack</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Configuration of the node label which will be used as the <code>client.rack</code> consumer configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tracing</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JaegerTracing-reference"><code>JaegerTracing</code></a>, <a href="#type-OpenTelemetryTracing-reference"><code>OpenTelemetryTracing</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The configuration of tracing in Kafka Connect.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaConnectTemplate-reference"><code>KafkaConnectTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka Connect and Kafka Mirror Maker 2 resources. The template allows users to specify how the <code>Pods</code>, <code>Service</code>, and other services are generated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">externalConfiguration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ExternalConfiguration-reference"><code>ExternalConfiguration</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Pass data from Secrets or ConfigMaps to the Kafka Connect pods and use them to configure connectors.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">metricsConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JmxPrometheusExporterMetrics-reference"><code>JmxPrometheusExporterMetrics</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Metrics configuration.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMaker2ClusterSpec-reference"><a class="link" href="#type-KafkaMirrorMaker2ClusterSpec-reference">139. <code>KafkaMirrorMaker2ClusterSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a></p>
</div>
<div class="paragraph">
<p><a href="#type-KafkaMirrorMaker2ClusterSpec-schema-reference">Full list of <code>KafkaMirrorMaker2ClusterSpec</code> schema properties</a></p>
</div>
<div class="paragraph">
<p>Configures Kafka clusters for mirroring.</p>
</div>
<div class="sect2">
<h3 id="property-mirrormaker2-config-reference"><a class="link" href="#property-mirrormaker2-config-reference">139.1. <code>config</code></a></h3>
<div class="paragraph">
<p>Use the <code>config</code> properties to configure Kafka options.</p>
</div>
<div class="paragraph">
<p>Standard Apache Kafka configuration may be provided, restricted to those properties not managed directly by Strimzi.</p>
</div>
<div class="paragraph">
<p>For client connection using a specific <em>cipher suite</em> for a TLS version, you can <a href="#con-common-configuration-ssl-reference">configure allowed <code>ssl</code> properties</a>.
You can also <a href="#con-common-configuration-ssl-reference">configure the <code>ssl.endpoint.identification.algorithm</code> property</a> to enable or disable hostname verification.</p>
</div>
</div>
<div class="sect2">
<h3 id="type-KafkaMirrorMaker2ClusterSpec-schema-reference"><a class="link" href="#type-KafkaMirrorMaker2ClusterSpec-schema-reference">139.2. <code>KafkaMirrorMaker2ClusterSpec</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">alias</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Alias used to reference the Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrapServers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A comma-separated list of <code>host:port</code> pairs for establishing the connection to the Kafka cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tls</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ClientTls-reference"><code>ClientTls</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>TLS configuration for connecting MirrorMaker 2 connectors to a cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">authentication</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaClientAuthenticationTls-reference"><code>KafkaClientAuthenticationTls</code></a>, <a href="#type-KafkaClientAuthenticationScramSha256-reference"><code>KafkaClientAuthenticationScramSha256</code></a>, <a href="#type-KafkaClientAuthenticationScramSha512-reference"><code>KafkaClientAuthenticationScramSha512</code></a>, <a href="#type-KafkaClientAuthenticationPlain-reference"><code>KafkaClientAuthenticationPlain</code></a>, <a href="#type-KafkaClientAuthenticationOAuth-reference"><code>KafkaClientAuthenticationOAuth</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Authentication configuration for connecting to the cluster.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The MirrorMaker 2 cluster config. Properties with the following prefixes cannot be set: ssl., sasl., security., listeners, plugin.path, rest., bootstrap.servers, consumer.interceptor.classes, producer.interceptor.classes (with the exception of: ssl.endpoint.identification.algorithm, ssl.cipher.suites, ssl.protocol, ssl.enabled.protocols).</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMaker2MirrorSpec-reference"><a class="link" href="#type-KafkaMirrorMaker2MirrorSpec-reference">140. <code>KafkaMirrorMaker2MirrorSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMaker2Spec-reference"><code>KafkaMirrorMaker2Spec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sourceCluster</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The alias of the source cluster used by the Kafka MirrorMaker 2 connectors. The alias must match a cluster in the list at <code>spec.clusters</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">targetCluster</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The alias of the target cluster used by the Kafka MirrorMaker 2 connectors. The alias must match a cluster in the list at <code>spec.clusters</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sourceConnector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMaker2ConnectorSpec-reference"><code>KafkaMirrorMaker2ConnectorSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka MirrorMaker 2 source connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">heartbeatConnector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMaker2ConnectorSpec-reference"><code>KafkaMirrorMaker2ConnectorSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka MirrorMaker 2 heartbeat connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">checkpointConnector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaMirrorMaker2ConnectorSpec-reference"><code>KafkaMirrorMaker2ConnectorSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka MirrorMaker 2 checkpoint connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicsPattern</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A regular expression matching the topics to be mirrored, for example, "topic1|topic2|topic3". Comma-separated lists are also supported.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicsBlacklistPattern</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>topicsBlacklistPattern</code> property has been deprecated, and should now be configured using <code>.spec.mirrors.topicsExcludePattern</code>.</strong> A regular expression matching the topics to exclude from mirroring. Comma-separated lists are also supported.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">topicsExcludePattern</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A regular expression matching the topics to exclude from mirroring. Comma-separated lists are also supported.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupsPattern</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A regular expression matching the consumer groups to be mirrored. Comma-separated lists are also supported.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupsBlacklistPattern</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>groupsBlacklistPattern</code> property has been deprecated, and should now be configured using <code>.spec.mirrors.groupsExcludePattern</code>.</strong> A regular expression matching the consumer groups to exclude from mirroring. Comma-separated lists are also supported.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">groupsExcludePattern</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A regular expression matching the consumer groups to exclude from mirroring. Comma-separated lists are also supported.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMaker2ConnectorSpec-reference"><a class="link" href="#type-KafkaMirrorMaker2ConnectorSpec-reference">141. <code>KafkaMirrorMaker2ConnectorSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMaker2MirrorSpec-reference"><code>KafkaMirrorMaker2MirrorSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tasksMax</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The maximum number of tasks for the Kafka Connector.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">config</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Kafka Connector configuration. The following properties cannot be set: connector.class, tasks.max.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">autoRestart</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-AutoRestart-reference"><code>AutoRestart</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Automatic restart of connector and tasks configuration.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pause</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>The <code>pause</code> property has been deprecated.</strong> Deprecated in Strimzi 0.38.0, use state instead. Whether the connector should be paused. Defaults to false.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">state</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [running, paused, stopped])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The state the connector should be in. Defaults to running.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaMirrorMaker2Status-reference"><a class="link" href="#type-KafkaMirrorMaker2Status-reference">142. <code>KafkaMirrorMaker2Status</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaMirrorMaker2-reference"><code>KafkaMirrorMaker2</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">url</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The URL of the REST API endpoint for managing and monitoring Kafka Connect connectors.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">autoRestartStatuses</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-AutoRestartStatus-reference"><code>AutoRestartStatus</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of MirrorMaker 2 connector auto restart statuses.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectorPlugins</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ConnectorPlugin-reference"><code>ConnectorPlugin</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The list of connector plugins available in this Kafka Connect deployment.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connectors</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of MirrorMaker 2 connector statuses, as reported by the Kafka Connect REST API.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labelSelector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Label selector for pods providing this resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The current number of pods being used to provide this resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaRebalance-reference"><a class="link" href="#type-KafkaRebalance-reference">143. <code>KafkaRebalance</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaRebalanceSpec-reference"><code>KafkaRebalanceSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the Kafka rebalance.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaRebalanceStatus-reference"><code>KafkaRebalanceStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the Kafka rebalance.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaRebalanceSpec-reference"><a class="link" href="#type-KafkaRebalanceSpec-reference">144. <code>KafkaRebalanceSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaRebalance-reference"><code>KafkaRebalance</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mode</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one of [remove-brokers, full, add-brokers])</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Mode to run the rebalancing. The supported modes are <code>full</code>, <code>add-brokers</code>, <code>remove-brokers</code>.
If not specified, the <code>full</code> mode is used by default.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>full</code> mode runs the rebalancing across all the brokers in the cluster.</p>
</li>
<li>
<p><code>add-brokers</code> mode can be used after scaling up the cluster to move some replicas to the newly added brokers.</p>
</li>
<li>
<p><code>remove-brokers</code> mode can be used before scaling down the cluster to move replicas out of the brokers to be removed.</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">brokers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The list of newly added brokers in case of scaling up or the ones to be removed in case of scaling down to use for rebalancing. This list can be used only with rebalancing mode <code>add-brokers</code> and <code>removed-brokers</code>. It is ignored with <code>full</code> mode.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">goals</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of goals, ordered by decreasing priority, to use for generating and executing the rebalance proposal. The supported goals are available at <a href="https://github.com/linkedin/cruise-control#goals" class="bare">https://github.com/linkedin/cruise-control#goals</a>. If an empty goals list is provided, the goals declared in the default.goals Cruise Control configuration parameter are used.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">skipHardGoalCheck</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Whether to allow the hard goals specified in the Kafka CR to be skipped in optimization proposal generation. This can be useful when some of those hard goals are preventing a balance solution being found. Default is false.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">rebalanceDisk</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enables intra-broker disk balancing, which balances disk space utilization between disks on the same broker. Only applies to Kafka deployments that use JBOD storage with multiple disks. When enabled, inter-broker balancing is disabled. Default is false.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">excludedTopics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A regular expression where any matching topics will be excluded from the calculation of optimization proposals. This expression will be parsed by the java.util.regex.Pattern class; for more information on the supported format consult the documentation for that class.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">concurrentPartitionMovementsPerBroker</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The upper bound of ongoing partition replica movements going into/out of each broker. Default is 5.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">concurrentIntraBrokerPartitionMovements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The upper bound of ongoing partition replica movements between disks within each broker. Default is 2.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">concurrentLeaderMovements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The upper bound of ongoing partition leadership movements. Default is 1000.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicationThrottle</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The upper bound, in bytes per second, on the bandwidth used to move replicas. There is no limit by default.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicaMovementStrategies</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A list of strategy class names used to determine the execution order for the replica movements in the generated optimization proposal. By default BaseReplicaMovementStrategy is used, which will execute the replica movements in the order that they were generated.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaRebalanceStatus-reference"><a class="link" href="#type-KafkaRebalanceStatus-reference">145. <code>KafkaRebalanceStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaRebalance-reference"><code>KafkaRebalance</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sessionId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The session identifier for requests to Cruise Control pertaining to this KafkaRebalance resource. This is used by the Kafka Rebalance operator to track the status of ongoing rebalancing operations.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">optimizationResult</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">map</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A JSON object describing the optimization result.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaNodePool-reference"><a class="link" href="#type-KafkaNodePool-reference">146. <code>KafkaNodePool</code> schema reference</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaNodePoolSpec-reference"><code>KafkaNodePoolSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the KafkaNodePool.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaNodePoolStatus-reference"><code>KafkaNodePoolStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the KafkaNodePool.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaNodePoolSpec-reference"><a class="link" href="#type-KafkaNodePoolSpec-reference">147. <code>KafkaNodePoolSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaNodePool-reference"><code>KafkaNodePool</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The number of pods in the pool.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">storage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-EphemeralStorage-reference"><code>EphemeralStorage</code></a>, <a href="#type-PersistentClaimStorage-reference"><code>PersistentClaimStorage</code></a>, <a href="#type-JbodStorage-reference"><code>JbodStorage</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Storage configuration (disk). Cannot be updated.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">roles</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one or more of [controller, broker]) array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The roles that the nodes in this pool will have when KRaft mode is enabled. Supported values are 'broker' and 'controller'. This field is required. When KRaft mode is disabled, the only allowed value if <code>broker</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">resources</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core">ResourceRequirements</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>CPU and memory resources to reserve.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jvmOptions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-JvmOptions-reference"><code>JvmOptions</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>JVM Options for pods.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">template</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-KafkaNodePoolTemplate-reference"><code>KafkaNodePoolTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for pool resources. The template allows users to specify how the resources belonging to this pool are generated.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaNodePoolTemplate-reference"><a class="link" href="#type-KafkaNodePoolTemplate-reference">148. <code>KafkaNodePoolTemplate</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaNodePoolSpec-reference"><code>KafkaNodePoolSpec</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">podSet</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka <code>StrimziPodSet</code> resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-PodTemplate-reference"><code>PodTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka <code>Pods</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">perPodService</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka per-pod <code>Services</code> used for access from outside of Kubernetes.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">perPodRoute</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka per-pod <code>Routes</code> used for access from outside of OpenShift.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">perPodIngress</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for Kafka per-pod <code>Ingress</code> used for access from outside of Kubernetes.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">persistentVolumeClaim</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ResourceTemplate-reference"><code>ResourceTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for all Kafka <code>PersistentVolumeClaims</code>.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">kafkaContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka broker container.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">initContainer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-ContainerTemplate-reference"><code>ContainerTemplate</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Template for the Kafka init container.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-KafkaNodePoolStatus-reference"><a class="link" href="#type-KafkaNodePoolStatus-reference">149. <code>KafkaNodePoolStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-KafkaNodePool-reference"><code>KafkaNodePool</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">nodeIds</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Node IDs used by Kafka nodes in this pool.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clusterId</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kafka cluster ID.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">roles</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string (one or more of [controller, broker]) array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Added in Strimzi 0.39.0. The roles currently assigned to this pool.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">replicas</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The current number of pods being used to provide this resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">labelSelector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Label selector for pods providing this resource.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-StrimziPodSet-reference"><a class="link" href="#type-StrimziPodSet-reference">150. <code>StrimziPodSet</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p><a href="#type-StrimziPodSet-schema-reference">Full list of <code>StrimziPodSet</code> schema properties</a></p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
<code>StrimziPodSet</code> is an internal Strimzi resource.
Information is provided for reference only.
Do not create, modify or delete <code>StrimziPodSet</code> resources as this might cause errors.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="type-StrimziPodSet-schema-reference"><a class="link" href="#type-StrimziPodSet-schema-reference">150.1. <code>StrimziPodSet</code> schema properties</a></h3>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">spec</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-StrimziPodSetSpec-reference"><code>StrimziPodSetSpec</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The specification of the StrimziPodSet.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">status</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-StrimziPodSetStatus-reference"><code>StrimziPodSetStatus</code></a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The status of the StrimziPodSet.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-StrimziPodSetSpec-reference"><a class="link" href="#type-StrimziPodSetSpec-reference">151. <code>StrimziPodSetSpec</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-StrimziPodSet-reference"><code>StrimziPodSet</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">selector</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#labelselector-v1-meta">LabelSelector</a></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Selector is a label query which matches all the pods managed by this <code>StrimziPodSet</code>. Only <code>matchLabels</code> is supported. If <code>matchExpressions</code> is set, it will be ignored.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pods</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#pods-v1-core">Map</a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The Pods managed by this StrimziPodSet.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="type-StrimziPodSetStatus-reference"><a class="link" href="#type-StrimziPodSetStatus-reference">152. <code>StrimziPodSetStatus</code> schema reference</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Used in: <a href="#type-StrimziPodSet-reference"><code>StrimziPodSet</code></a></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 28.5714%;">
<col style="width: 28.5714%;">
<col style="width: 42.8572%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property</th>
<th class="tableblock halign-left valign-top">Property type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conditions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#type-Condition-reference"><code>Condition</code></a> array</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>List of status conditions.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>The generation of the CRD that was last reconciled by the operator.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">pods</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Number of pods managed by this <code>StrimziPodSet</code> resource.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readyPods</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Number of pods managed by this <code>StrimziPodSet</code> resource that are ready.</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">currentPods</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Number of pods managed by this <code>StrimziPodSet</code> resource that have the current revision.</p>
</div></div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2024-03-12 13:22:05 UTC
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/highlight.min.js"></script>
<script>
if (!hljs.initHighlighting.called) {
  hljs.initHighlighting.called = true
  ;[].slice.call(document.querySelectorAll('pre.highlight > code[data-lang]')).forEach(function (el) { hljs.highlightBlock(el) })
}
</script>
</body>
</html>